home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
dosref.EXE
/
CHAPTER.005
< prev
next >
Wrap
Text File
|
1996-01-31
|
181KB
|
3,586 lines
** Programmer's Technical Reference for MSDOS and the IBM PC **
C H A P T E R F I V E
INTERRUPTS 22H THROUGH 0FFH
C O N T E N T S
Interrupt 22h Terminate Address .............................. 5**1
Interrupt 23h Ctrl-Break Exit Address ........................ 5**2
Interrupt 24h Critical Error Handler ......................... 5**3
Interrupt 25h Absolute Disk Read ............................. 5**4
Interrupt 26h Absolute Disk Write ............................ 5**5
Interrupt 27h Terminate And Stay Resident .................... 5**6
Interrupt 28h DOS Idle Interrupt ............................. 5**7
Interrupt 29h Fast Screen Write .............................. 5**8
Interrupt 2Ah Microsoft Networks - Session Layer Interrupt ... 5**9
Interrupt 2Bh Unknown ........................................ 5**10
Interrupt 2Ch Unknown ........................................ 5**11
Interrupt 2Dh Unknown ........................................ 5**12
Interrupt 2Eh Alternate EXEC (DOS 2.0+) ...................... 5**13
Interrupt 2Fh Multiplex Interrupt ............................ 5**14
Interrupt 30h FAR jump instruction for CP/M-style calls ...... 5**15
Interrupt 31h Unknown ........................................ 5**16
Interrupt 32h Unknown ........................................ 5**17
Interrupt 33h Used by Microsoft Mouse Driver Function Calls .. 5**18
Interrupt 34h Turbo/Microsoft langs - Floating Point emul. ... 5**19
Interrupt 35h Turbo/Microsoft langs - Floating Point emul. ... 5**20
Interrupt 36h Turbo/Microsoft langs - Floating Point emul. ... 5**21
Interrupt 37h Turbo/Microsoft langs - Floating Point emul. ... 5**22
Interrupt 38h Turbo/Microsoft langs - Floating Point emul. ... 5**23
Interrupt 39h Turbo/Microsoft langs - Floating Point emul. ... 5**24
Interrupt 3Ah Turbo/Microsoft langs - Floating Point emul. ... 5**25
Interrupt 3Bh Turbo/Microsoft langs - Floating Point emul. ... 5**26
Interrupt 3Ch Turbo/Microsoft langs - Floating Point emul. ... 5**27
Interrupt 3Dh Turbo/Microsoft langs - Floating Point emul. ... 5**28
Interrupt 3Eh Turbo/Microsoft langs - Floating Point emul. ... 5**29
Interrupt 3Fh Overlay Manager Interrupt (Microsoft LINK.EXE) . 5**30
Interrupt 40h Hard Disk BIOS ................................. 5**31
Interrupt 41h Hard Disk Parameters ........................... 5**32
Interrupt 42h Pointer to screen BIOS entry ................... 5**33
Interrupt 43h Pointer to EGA Graphics Character Table ........ 5**34
Interrupt 44h Pointer to graphics character table ............ 5**35
Interrupt 45h Reserved by IBM (not initialized) ............. 5**36
Interrupt 46h Pointer to second hard disk parameter block .... 5**37
Interrupt 47h Reserved by IBM (not initialized) ............. 5**38
Interrupt 48h Cordless Keyboard Translation .................. 5**39
Interrupt 49h Non-kbd Scan Code Translation Table Addr (PCjr) 5**40
Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2) ...... 5**41
Interrupt 4Bh Reserved by IBM (not initialized) ............. 5**42
Interrupt 4Ch Reserved by IBM (not initialized) ............. 5**43
Interrupt 4Dh Reserved by IBM (not initialized) ............. 5**44
Interrupt 4Eh Reserved by IBM (not initialized) ............. 5**45
Interrupt 4Fh Reserved by IBM (not initialized) ............. 5**46
Interrupt 50-57 IRQ0-IRQ7 Relocation ........................... 5**47
Interrupt 58h Reserved by IBM (not initialized) ............. 5**48
Interrupt 59h Reserved by IBM (not initialized) ............. 5**49
Interrupt 5Ah Reserved by IBM (not initialized) ............ 5**50
Interrupt 5Bh Reserved by IBM (not initialized) ............. 5**51
Interrupt 5Ah Cluster Adapter BIOS entry address ............. 5**52
Interrupt 5Bh Reserved by IBM (not initialized) ............. 5**53
Interrupt 5Ch NETBIOS interface entry port, TOPS ............. 5**54
Interrupt 5Dh Reserved by IBM (not initialized) ............. 5**55
Interrupt 5Eh Reserved by IBM (not initialized) ............. 5**56
Interrupt 5Fh Reserved by IBM (not initialized) ............. 5**57
Interrupt 60h-67h User Program Interrupts ..................... 5**58
Interrupt 60h Network OS Interface ........................... 5**59
Interrupt 67h Expanded Memory Board Driver Interrupt ......... 5**60
Interrupt 68h Not Used (not initialized) .................... 5**61
Interrupt 69h Not Used (not initialized) .................... 5**62
Interrupt 6Ah Not Used (not initialized) .................... 5**63
Interrupt 6Bh Not Used (not initialized) .................... 5**64
Interrupt 6Ch System Resume Vector (Convertible) ............. 5**65
Interrupt 6Dh Not Used (not initialized) .................... 5**66
Interrupt 6Eh Not Used (not initialized) .................... 5**67
Interrupt 6Fh 10-Net API...................................... 5**68
Interrupt 70h IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) .. 5**69
Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) .. 5**70
Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved ........... 5**71
Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved ........... 5**72
Interrupt 74h IRQ 12 Mouse Interrupt (PS/2) ................. 5**73
Interrupt 75h IRQ 13, Coprocessor Error (AT) ................. 5**74
Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75
Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved ............ 5**76
Interrupt 78h Not Used ....................................... 5**77
Interrupt 79h Not Used ....................................... 5**78
Interrupt 7Ah Reserved ....................................... 5**79
Interrupt 7Bh-7Eh Not Used by IBM ............................. 5**80
Interrupt 7Ch REXX-PC API .................................... 5**81
Interrupt 7Fh IBM 8514/A Graphics Adapter API ................ 5**82
Interrupt 80h-85h Reserved by BASIC ........................... 5**83
Interrupt 86h Int 18 when relocated by NETBIOS ............... 5**84
Interrupt 86h-0F0h Used by BASIC when interpreter is running .. 5**85
Interrupt 0A4h Right Hand Man API ............................. 5**86
Interrupt 0D4h PC-MOS/386 API ................................. 5**87
Interrupt 0E0h Digital Research CP/M-86 function calls ........ 5**88
Interrupt 0E1h PC Cluster Disk Server Information ............. 5**89
Interrupt 0E2h PC Cluster Program ............................. 5**90
Interrupt 0E4h Logitech Modula-2 v2.0 Monitor Entry ......... 5**91
Interrupt 0E5h Not Used ....................................... 5**92
Interrupt 0E6h Not Used ....................................... 5**93
Interrupt 0E7h Not Used ....................................... 5**94
Interrupt 0E8h Not Used ....................................... 5**95
Interrupt 0E9h Not Used ....................................... 5**96
Interrupt 0EAh Not Used ....................................... 5**97
Interrupt 0EBh Not Used ....................................... 5**98
Interrupt 0ECh Not Used ....................................... 5**99
Interrupt 0EDh Not Used ....................................... 5**100
Interrupt 0EEh Not Used ....................................... 5**101
Interrupt 0EFh GEM interface (Digital Research) ............... 5**102
Interrupt 0F0h unknown ........................................ 5**103
Interrupts 0F1h-0FFh (absolute addresses 3C4h-3FFh) ........... 5**104
Interrupt 0F4h Not Used ............ .......................... 5**105
Interrupt 0F5h Not Used ............ .......................... 5**106
Interrupt 0F8h Set Shell Interrupt (OEM) ...................... 5**107
Interrupt 0F9h Reserved ....................................... 5**108
Interrupt 0FAh USART ready (RS-232C) .......................... 5**109
Interrupt 0FBh USART RS ready (keyboard) ...................... 5**110
Interrupt 0FCh Unknown ........................................ 5**111
Interrupt 0FDh reserved for user interrupt .................... 5**112
Interrupt 0FEh reserved by IBM ................................ 5**113
Interrupt 0FFh reserved by IBM ................................ 5**114
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 22h Terminate Address ............................. 5**1 │
└─────────────────────────────────────────────────────────────────────┘
(0:0088h)
This interrupt transfers control to the far (dword) address at this
interrupt location when an application program terminates. The default
address for this interrupt is 0:0088h through 0:008Bh. This address is
copied into the program's Program Segment Prefix at bytes 0Ah through
0Dh at the time the segment is created and is restored from the PSP
when the program terminates. The calling program is normally
COMMAND.COM or an application. Do not issue this interrupt directly,
as the EXEC function call does this for you. If an application spawns
a child process, it must set the Terminate Address prior to issuing
the EXEC function call, otherwise when the second program terminated
it would return to the calling program's Terminate Address rather than
its own. This address may be set with int 21, function 25h.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 23h Ctrl-Break Exit Address ....................... 5**2 │
└─────────────────────────────────────────────────────────────────────┘
(0:008Ch)
If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or
STDAUX, int 23h is executed. If BREAK is on, int 23h is checked on
MOST function calls (notably 06h). If the user written Ctrl-Break
routine saves all registers, it may end with a return-from-interrupt
instruction (IRET) to continue program execution. If the user-written
interrupt program returns with a long return, the carry flag is used
to determine whether the program will be aborted. If the carry flag is
set, the program is aborted, otherwise execution continues (as with a
return by IRET). If the user-written Ctrl-Break interrupt uses
function calls 09h or 0Ah, (Display String or Buffered Keyboard Input)
then a three-byte string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT.
If execution is continued with an IRET, I/O continues from the start
of the line. When the interrupt occurs, all registers are set to the
value they had when the original function call to DOS was made.
There are no restrictions on what the Ctrl-Break handler is allowed
to do, including DOS function calls, as long as the registers are
unchanged if an IRET is used.
If the program creates a new segment and loads a second program
which itself changes the Ctrl-Break address, the termination of the
second program and return to the first causes the Ctrl-Break address
to be restored from the PSP to the value it had before execution of
the second program.
DOS can check for a Ctrl-C at a couple of different places. In at
least some cases, the value in the AX register on entry to the int 23h
handler is the same as it was on the original entry to int 21h.
COMMAND.COM makes use of this fact in its int 23h handler. When
running a batch file, if you press Ctrl-C it prompts you with the
"Terminate batch job (Y/N)?" question. If you press Ctrl-C in
response to that question, the int 23h handler notices that it's being
called recursively (having set an internal flag), and uses the value
of AX to determine how far it had gotten on the previous pass. If you
have not responded to the query yet, it asks it again; otherwise it
just terminates the current program.
This could cause a problem in a program which was catching int 23h
so that it could release EMS or other resources on exit, then pass it
on to the original handler. When called a second time, it would
correctly notice that it had already cleaned up and wouldn't do it
again, but by the time it got to the original handler, AX would be
trashed. The result would be the standard "Memory allocation
error/Cannot load COMMAND, system halted".
Apparently, if you want to catch int 23h but also pass it on to the
original handler, you should either save and restore registers, or
restore the original vector on the first trap so you don't get invoked
again.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 24h Critical Error Handler ........................ 5**3 │
└─────────────────────────────────────────────────────────────────────┘
(0:0090h)
When an unrecoverable I/O error occurs, control is transferred to an
error handler in the resident part of COMMAND.COM with an int 24h.
This may be the standard DOS error handler (Abort, Retry, Ignore,
Fail?) or a user-written routine.
On entry to the error handler, AH will have its bit 7=0 (high order
bit) if the error was a disk error (probably the most common error),
bit 7=1 if not.
BP:SI contains the address of a Device Header Control Block from
which additional information can be retrieved (see below). The
register is set up for a retry operation and an error code is in the
lower half of the DI register with the upper half undefined.
DOS places the following items on the user stack. The stack
contains the following from top to bottom:
IP │ DOS registers from the issuing int 24h
CS │
flags │
───────┼───────────────────────────────────────────────────────
AX │ user registers at time of original int 21h request
BX │
CX │
SI │
DI │
BP │
DS │
ES │
───────┼───────────────────────────────────────────────────────
IP │ original int 21h from the user to DOS
CS │
flags │
To reroute the critical error handler to a user-written critical
error handler, the following should be done:
Before an int 24h occurs:
1) The user application initialization code should save the int 24h
vector and replace the vector with one pointing to the user error
routine.
When the int 24h occurs:
2) When the user error routine received control it should push the flag
registers onto the stack and execute a far call to the original int
24h vector saved in step 1.
3) DOS gives the appropriate prompt, and waits for user input (Abort,
Retry, Ignore, Fail). After the user input, DOS returns control to
the user error routine instruction following the far call.
4) The user error routine can now do any tasks necessary. To return
to the original application at the point the error occurred, the
error routine needs to execute an IRET instruction. Otherwise, the
user error routine should remove the IP, CS, and flag registers from
the stack. Control can then be passed to the desired routine.
Int 24h provides the following values in registers on entry to the
interrupt handler:
entry AH status byte (bits)
7 0 disk I/O hard error
1 other error - if block device, bad FAT
- if char device, code in DI
6 unused
5 0 if IGNORE is not allowed
1 if IGNORE is allowed
4 0 if RETRY is not allowed
1 if RETRY is allowed
3 0 if FAIL is not allowed
1 if FAIL is allowed
2 \ disk area of error 00 = DOS area 01 = FAT
1 / 10 = root dir 11 = data area
0 0 if read operation
1 if write operation
AL drive number if AH bit 7 = 1, otherwise undefined
If it is a hard error on disk (AH bit 7=0), register AL
contains the failing drive number (0=A:, 1=B:, etc.).
BP:SI address of a Device Header Control Block for which error
occurred. Block device if high bit of BP:SI+4 = 1
DI (low byte) error code (note: high byte is undefined)
error code description
00h attempt to write on write-protected diskette
01h unknown unit
02h drive not ready
03h unknown command
04h data error (bad CRC)
05h bad request structure length
06h seek error
07h unknown media type
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Fh invalid disk change (DOS 3.0+)
10h FCB unavailable (DOS 3.0+)
11h sharing buffer overflow (DOS 3.0+)
note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
The handler must return this information:
The registers are set such that if an IRET is executed, DOS responds
according to (AL) as follows:
AL 00h IGNORE the error
01h RETRY the operation
02h ABORT via int 22h (jump to terminate address)
03h FAIL the system call that is in progress (DOS 3.0+)
note 1) Be careful when choosing to ignore a response because this
causes DOS to think that an operation has completed
successfully when it may not have.
2) If the error was a character device, the contents of AL are
invalid.
3) Early PS/2 BIOSes did not perform a retry on disk errors until
a disk had been read at least once after boot-up.
Other Errors
If AH bit 7=1, the error occurred on a character device, or was the
result of a bad memory image of the FAT. The device header passed in
BP:SI can be examined to determine which case exists. If the
attribute byte high-order bit indicates a block device, then the error
was a bad FAT. Otherwise, the error is on a character device.
If a character device is involved, the contents of AL are
unpredictable, and the error code is in DI as above.
note 1) Before giving this routine control for disk errors, DOS
performs several retries. The number of retries varies
according to the DOS version.
2) For disk errors, this exit is taken only for errors occurring
during an int 21h function call. It is not used for errors
during an int 25h or 26h.
3) This routine is entered in a disabled state.
4) All registers must be preserved.
5) This interrupt handler should refrain from using DOS function
calls. If necessary, it may use calls 01h through 12h. Use
of any other call destroys the DOS stack and leaves DOS in an
unpredictable state.
6) The interrupt handler must not change the contents of the
device header.
7) If the interrupt handler handles errors itself rather than
returning to DOS, it should restore the application program's
registers from the stack, remove all but the last three words
on the stack, then issue an IRET. This will return to the
program immediately after the int 21h that experienced the
error. Note that if this is done DOS will be in an unstable
state until a function call higher than 12h is issued,
therefore not recommended.
8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for
critical errors that occur on FAT or DIR sectors.
9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL
requests for network critical errors (50-79).
10) The device header pointed to by BP:SI is as follows:
dword pointer to next device (0FFFFh if last device)
word attributes:
bit 15 1 if character device.
If bit 15 is 1:
bit 0 = 1 if current standard input
bit 1 = 1 if current standard output
bit 2 = 1 if current NULL device
bit 3 = 1 if current CLOCK device
0 if block device.
bit 14 is the IOCTL bit
word pointer to device driver strategy entry point
word pointer to device driver interrupt entry point
8 bytes character device named field for block devices. The
first byte is the number of units.
11) To tell if the error occurred on a block or character device,
look at bit 15 in the attribute field (WORD at BP:SI+4).
12) If the name of the character device is desired, look at the
eight bytes starting at BP:SI+10.
Handling of Invalid Responses (DOS 3.0+)
A) If IGNORE (AL=0) is specified by the user and IGNORE is not
allowed (bit 5=0), make the response FAIL (AL=3).
B) If RETRY (AL=1) is specified by the user and RETRY is not
allowed (bit 4=0), make the response FAIL (AL=3).
C) If FAIL (AL=3) is specified by the user and FAIL is not
allowed (bit 3=0), make the response ABORT. (AL=2)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 25h Absolute Disk Read ............................ 5**4 │
│Interrupt 26h Absolute Disk Write ........................... 5**5 │
└─────────────────────────────────────────────────────────────────────┘
(0:0094h, 0:0098h)
These transfer control directly to the disk device driver. On
return, the original flags are still on the stack (put there by the
INT instruction). This is necessary because return information is
passed back in the current flags. All registers except the segment
registers are destroyed by these calls.
These interrupts should be avoided for software that is intended to
run on a network, as they may cause troubles in network environments.
PC-MOS/386 provides these services only for compatibility with
existing DOS-mode apps. 25h/26h are not available for native mode
386-mode DOS apps.
The number of sectors specified is transferred between the given
drive and the transfer address. Logical sector numbers are obtained
by numbering each sector sequentially starting from track 0, head 0,
sector 1 (logical sector 0) and continuing along the same head, then
to the next head until the last sector on the last head of the track
is counted. Thus, logical sector 1 is track 0, head 0, sector 2;
logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
then continues wih sector 1 on head 0 of the next track. Note that
although the sectors are sequentially numbered (for example, sectors 2
and 3 on track 0 in the example above), they may not be physically
adjacent on disk, due to interleaving. Note that the mapping is
different from that used by DOS 1.10 for double-sided diskettes.
The request is as follows:
int 25h for Absolute Disk Read, | except Compaq DOS 3.31 or DOS 4.0+
int 26h for Absolute Disk Write | over-32Mb partitions
entry AL drive number (0=A:, 1=B:, etc)
CX number of sectors to read (int 25h) or write (int 26h)
DS:BX segment/offset of disk transfer address buffer (DTA)
DX first relative sector to read - beginning logical sector
number
return CF set if error
AL error code issued to int 24h in low half of DI
AH 01h bad command
02h bad address mark
03h write-protected disk
04h requested sector not found
08h DMA failure
10h data error (bad CRC)
20h controller failed
40h seek operation failed
80h attachment failed to respond
note 1) DOS returns with a far ret which leave the original flags on
the stack. Be sure to pop the stack to prevent uncontrolled
growth.
2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and
later make special provision for adjusting the stack on int
25h and 26h. This probably won't hurt anything but you should
be aware of it.
3) Ints 25h and 26h will try rereading a disk if they get an
error the first time.
To address partition sizes greater than 32Mb an extended format is
provided in Compaq DOS 3.31, DOS 4.0, and DR-DOS. This format passes
a 32-bit address value by means of a parameter block. The extended
format may be used to address disks smaller than 32Mb as well as
larger.
The request is as follows:
int 25h for Absolute Disk Read, | Compaq DOS 3.31 or DOS 4.0+
int 26h for Absolute Disk Write | over-32Mb partitions
entry AL drive number (0=A:, 1=B:, etc)
CX 0FFFFh
DS:BX address of parameter block. Block format:
4 bytes sector number
2 bytes number of sectors to read
4 bytes FAR pointer to buffer
return CF set if error
AL error code issued to int 24h in low half of DI
AH 01h bad command
02h bad address mark
03h write-protected disk
04h requested sector not found
08h DMA failure
10h data error (bad CRC)
20h controller failed
40h seek operation failed
80h attachment failed to respond
note 1) DOS returns with a far ret which leave the original flags on
the stack. Be sure to pop the stack to prevent uncontrolled
growth.
2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and
later make special provision for adjusting the stack on int
25h and 26h. This probably won't hurt anything but you should
be aware of it.
3) Ints 25h and 26h will try rereading a disk if they get an
error the first time.
4) Partition is potentially >32M (and requires this form of the
call) if bit 1 of device attribute word in device driver is
set.
5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS
Environment Software Interrupt Support", it lists:
25h direct read supported
26h direct write an error is returned on requests for
non-removable media
Interrupts 25h and 26h can read logical sectors only. They cannot
read hidden sectors.
Critical errors are not processed by ints 25h and 26h. Should one
happen, the interrupt routine will return an error value to the
program but will not itself call the critical error handler at int
24h.
The Microsoft DOS 5.0 Technical Reference refers to this call as
"superceded" and directs you to int 21h, fn 440Dh, minor code 61h,
"Read Track on Logical Drive" and minor code 41h, "Write Track on
Logical Drive." See Chapter 4.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 27h Terminate And Stay Resident ................... 5**6 │
└─────────────────────────────────────────────────────────────────────┘
(0:009Ch) (obsolete)
This vector is used by programs that are to remain resident when
COMMAND.COM regains control.
After initializing itself, the program must set DX to its last
address plus one relative to the program's initial DS or ES value (the
offset at which other programs can be loaded), then execute interrupt
27h. DOS then considers the program as an extension of itself, so the
program is not overlaid when other programs are executed. This is
useful for loading programs such as utilities and interrupt handlers
that must remain resident.
entry CS current program segment
DX last program byte + 1
return none
note 1) This interrupt must not be used by .EXE programs that are
loaded into the high end of memory.
2) This interrupt restores the interrupt 22h, 23h, and 24h
vectors in the same manner as interrupt 20h. Therefore, it
cannot be used to install permanently resident Ctrl-Break or
critical error handler routines.
3) The maximum size of memory that can be made resident by this
method is 64K.
4) Memory can be more efficiently used if the block containing a
copy of the environment is deallocated before terminating.
This can be done by loading ES with the segment contained in
2Ch of the PSP, and issuing function call 49h (Free Allocated
Memory).
5) DOS function call 4Ch allows a program to pass a completion
code to DOS, which can be interpreted with processing (see
function call 31h).
6) If int 27h is called by a program linked with the /HIGH
switch, it will occupy the top of memory and prevent
COMMAND.COM from reloading, which is probably not what you
want.
7) Int 21, function 31h is the preferred method to cause a
program to remain resident because this allows return
information to be passed and allows a program larger than 64K
to remain resident.
8) It is possible to make an EXE program resident with this call
by putting a 27h in the second byte of the PSP and terminating
with a RET FAR.
9) Programs terminating with int 27h do not close files on exit.
Your program must explicitly close any opened files before
going resident.
10) Int 27h does not work correctly when DX contains values from
0FFF1h to 0FFFFh. In this case, DOS discards the high bit of
the contents of DX, resulting in 32k less resident memory than
was requested by the program.
11) This interrupt will work with PC-MOS/386, but there are a
number of MOS-specific advantages to using int 21h/31h
instead. See Chapter 4 for further explanation.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 28h (not documented by Microsoft) ................. 5**7 │
└─────────────────────────────────────────────────────────────────────┘
* DOS Idle Interrupt
Int 28h has been provided by DOS since release 2.0. The int 28h
process is similar to the "Timer Tick" process provided by BIOS via
int 1Ch in that it is an "outbound" (from DOS) call which an
application can "hook onto" to get service at a particular entry
point. DOS normally only issues int 28h when it recieves a function
call (int 21h) from a foreground application with an argument in the
range of 0 thru 12 (0Ch) in the AH register, or when it is idling
waiting for keyboard input. In effect, when DOS issues int 28h, it is
saying to the background task "I'm not doing anything hot right now,
if you can use the time, go ahead." This means that a foreground
application which doesn't do many low-number DOS functions can preempt
CPU time easily.
When int 28h is being issued it is usually safe to do DOS calls.
You won't get int 28hs if a program is running that doesn't do its
keyboard input through DOS. You should rely on the timer interrupt
for these. It is used primarily by the PRINT.COM routines, but any
number of other routines can be chained to it by saving the original
vector and calling it with a FAR call (or just JMPing to it) at the
end of the new routine.
Int 28h is not called at all when any non-trivial foreground task is
running. As soon as a foreground program has a file open, int 28h no
longer gets called. Could make a good driver for for a background
program that works as long as there is nothing else going on in the
machine.
DOS uses 3 separate internal stacks: one for calls 01h through 0Ch;
another for calls 0Dh and above; and a third for calls 01h through 0Ch
when a Critical Error is in progress. When int 28h is called, any
calls above 0Ch can be executed without destroying the internal stack
used by DOS at the time.
The byte which is pushed on the stack before an int 28h just
indicates which stack area is being used by the current int 21h call.
In DOS 3.1, the code sequence that calls int 28h looks like this:
PUSH SS:[0304]
INT 28
POP SS:[0304]
The low-order byte of the word pushed contains 1 if the int 21h call
currently in progress is for services 1 through 0Ch, and 0 for service
0 and for 0Dh and up. Assuming that the last DOS call was not a
reentrant one, this tells you which set of DOS services should be safe
to call.
entry no parameters available
return none
note 1) The int 28h handler may invoke any int 21h function except
functions 00h through 0Ch (and 50h/51h under DOS 2.x unless
DOS CritErr flag is set).
2) Apparently int 28h is also called during screen writes.
3) Until some program installs its own routine, this interrupt
vector simply points to an IRET opcode.
4) Supported in OS/2 1.0's DOS Compatibility Box.
5) It is possible, if you are careful, to enhance the background
priority by providing more int 28h calls than DOS normally
would issue.
6) If the InDOS flag is zero on int 28h, then it was called by
someone other than DOS, and the word on the stack should NOT
be examined.
7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h
as a convenience for its SideKick product users. Interrupt 28
is the DOS busy flag which DESQview treats as a pause and
gives up time... foreground gets little time and background
gets a lot...reverse of normal."
8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 29h (not documented by Microsoft) ................. 5**8 │
└─────────────────────────────────────────────────────────────────────┘
* Internal - Quick Screen Output
This method is extremely fast (much faster than DOS 21h subfunctions
2 and 9, for example), and it is portable, even to "non-compatible"
MS-DOS computers.
entry AL ASCII value for character to output to screen
return unknown
note 1) Documented by Digital Equipment's DOS Reference as provided
with the DEC Rainbow. Also documented by Digital Research in
the DR-DOS manual.
2) If ANSI.SYS is installed, character output is filtered through
it.
3) Works on the IBM PC and compatibles, Wang PC, HP-150 and
Vectra, DEC Rainbow, NEC APC, Texas Instruments PC and others.
4) This interrupt is called from the DOS's output routines if
output is going to a device rather than a file, and the device
driver's attribute word has bit 3 (04h) set to "1".
5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS
3.1, PCDOS 3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31.
6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write
TTY) followed by an IRET.
7) Most of the fast ANSI device drivers use this interrupt -
ZANSI.SYS, NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's
DVANSI.SYS.
8) When using int 29h to output characters the ASCII 7 (BELL)
will suppress character output while the bell is sounding.
9) When device drivers (or the SYSINIT module which loads the
drivers) need to do console output, they use int 29h, to call
the console device driver directly. For example, messages
telling you about errors in your CONFIG.SYS file are printed
using this service.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Ah Microsoft Networks - Session Layer Interrupt .. 5**9 │
└─────────────────────────────────────────────────────────────────────┘
1) This interrupt was not officially documented by Microsoft
until the release of Windows 3.0, which has setup
parameters for int 2Ah.
2) LANtastic NetBIOS interface, original IBM PC LAN
interface.
3) NetBIOS alternate interface. The alternate interface
(2Ah) was originally designed as a "higher" level
interface to network communications rather than the "low"
level interface (5Ch) provided by the NETBIOS. The 2Ah
interface, however, does not support any higher level
functions than does the 5Ch interface and therefore has
not become a de facto standard as has the 5Ch interface.
4) Most DOS 4.0 external programs (SHARE, etc) check this
interrupt during installation.
entry AH 00h Check for Int 2Ah Network BIOS Installation
return AH nonzero if installed
01h Execute NETBIOS Request (no error retry)
ES:BX pointer to NCB
return AL NETBIOS error code
AH 00h if no error
01h if error
02h Set Net Printer Mode
03h Get Shared-Device Direct I/O Status
AL 00h
DS:SI pointer to ASCIIZ disk device name
return CF clear if allowed
set if denied
note 1) Direct I/O is through ints 13h, 25h, or
26h.
2) If the device is redirected (see int
21h/5F02h) or this call returns with
carry set, the program should not
perform direct disk I/O.
3) The device pointed to by DS:SI must
include the colon in the drive:pathname.
4) It may take some time for this call to
return to the calling program. Do not
use in time-sensitive applications.
04h Execute NETBIOS
AL 00h retry on error
01h no retry on error
ES:BX pointer to network control block
return AX 0000h for no error
AH 01h if error
AL error code (unknown)
note 1) IBM PC LAN says, "for adapter
independence, use int 2Ah. No not use
5Ch function provided by the network
adapter."
2) Error codes that are automatically
retried are:
09h no session resources available
12h session open rejected
21h interface busy
05h Get Network Resource Information
AL 00h
return AX reserved
BX # of network names (16 - names in
use)
CX number of available NCB commands
DX number of sessions (max - pending)
06h Network Print-Stream Control
(IBM PC LAN)
AL 01h Set spooled output to
concatenation mode
02h Set spooled output to
truncation mode
03h Trunate printer stream
return CF clear no error
set AX DOS error code
(LANtastic)
AL 01h Set spooled output to combined
mode
return none
02h Set spooled output in separate
mode
return none
note Printer output is not combined
when multiple programs are run or
when the printer is opened or
closed. This cmd. implicitly
starts a new print job.
03h Flush printer output
return none
note 1) Printer output is flushed and a
new print job is started. If no
output exists to be flushed then
this function has no affect.
2) 03h is equivalent to
Ctrl/Alt/keypad-*
note NETBIOS 1.10
07h-19h unknown
20h unknown
note AL=01h intercepted by DESQview 2.0.
23h Receive Broadcast Datagram
IBM PC LAN 1.2. Manual says "use is not allowed".
80h Begin DOS Critical Section
AL critical section number (1 to 6)
note SHARE.EXE uses critical section number 01h.
81h End DOS Critical Section
AL critical section number (1 to 6)
note SHARE.EXE uses critical section number 01h.
82h Server Hook
stack AX from call to int 21h
return stack unchanged
note Called by the int 21h function dispatcher
in DOS 3.10+ for function 0 and functions
greater than 0Ch except 59h.
84h Keyboard Busy Loop
note Same functionality as DOS's int 28h?
87h Used by DOS PRINT to mark Critical Regions:
AL 00h Begin Critical Region
01h End Critical Region
return CF set region already active
0A3h Receive Broadcast Datagram
IBM PC LAN 1.2. Manual says "use is not allowed".
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Bh (not documented by Microsoft) ................. 5**10│
└─────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Ch (not documented by Microsoft) ................. 5**11│
└─────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Dh (not documented by Microsoft) ................. 5**12│
└─────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Eh (undocumented by Microsoft) (DOS 2.0+) ....... 5**13│
└─────────────────────────────────────────────────────────────────────┘
* Internal Routine for DOS (Alternate EXEC)
This interrupt passes a command line addressed by DS:SI to
COMMAND.COM. The command line must be formatted just like the
unformatted parameter area of a Program Segment Prefix. That is, the
first byte must be a count of characters, and the second and
subsequent bytes must be a command line with parameters, terminated by
a carriage return character.
When executed, int 2Eh will reload the transient part of the command
interpreter if it is not currently in memory. If called from a
program that was called from a batch file, it will abort the batch
file. If executed from a program which has been spawned by the EXEC
function, it will abort the whole chain and probably lock up the
computer. Int 2Eh also destroys all registers including the stack
pointer.
Int 2Eh is called from the transient portion of the program to reset
the DOS PSP pointers using the above Functions #81 & #80, and then
reenters the resident program.
When called with a valid command line, the command will be carried
out by COMMAND.COM just as though you had typed it in at the DOS
prompt. Note that the count does not include the carriage return.
This is an elegant way to perform a SET from an application program
against the master environment block for example.
entry DS:SI pointer to an ASCIIZ command line in the form:
count byte
ASCII string
carriage return
null byte
note 1) Destroys all registers including stack pointer.
2) Seems to work OK in both DOS 2.x and 3.x.
3) It is reportedly not used by DOS.
4) As far as known, int 2Eh is not used by DOS 3.1, although it
was called by COMMAND.COM of PCDOS 3.0, so it appears to be in
3.1 only for the sake of compatibility.
5) Not used by the aftermarket 4DOS command interpreter prior to
version 3.0. 3.0 merely hooks this vector and does nothing
with it. 3.02 and later provide a TSR to add 2Eh capability.
6) Trapped by PC-MOS/386 to prevent illegal entry into the
command processor.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 2Fh Multiplex Interrupt ........................... 5**14│
└─────────────────────────────────────────────────────────────────────┘
Interrupt 2Fh is the multiplex interrupt. A general interface is
defined between two processes. It is up to the specific application
using interrupt 2Fh to define specific functions and parameters.
This interrupt is becoming more commonly used as the available
interrupt 21 functions are getting to be in short supply. Int 2Fh
doesn't require any support from DOS itself for it to be used in
application programs. It's not handled by DOS, but by the programs
themselves.
Every multiplex interrupt handler is assigned a specific multiplex
number. The multiplex number is specified in the AH register; the AH
value tells which program your request is directed toward. The
specific function that the handler is to perform is placed in the AL
register. Other parameters are places in the other registers as
needed. The handlers are chained into the 2Fh interrupt vector and
the multiplex number is checked to see if any other application is
using the same multiplex number. There is no predefined method for
assigning a multiplex number to a handler. You must just pick one.
To avoid a conflict if two applications choose the same multiplex
number, the multiplex numbers used by an application should be
patchable. In order to check for a previous installation of the
current application, you can search memory for a unique string
included in your program. If the value you wanted in AH is taken but
you don't find the string, then another application has grabbed that
location.
Int 2Fh was not documented under DOS 2.x. There is no reason not to
use int 2Fh as the multiplex interrupt in DOS 2.x. The only problem
is that DOS 2.x does not initialize the int 2Fh vector, so when you
try to chain to it like you are supposed to, it will crash. If your
program checks the vector for being zero and initializes it itself or
doesn't chain in that case, it will work for you n 2.x just the same
as 3.x.
DOS 3.2 itself contains some int 2Fh handlers - it uses values of
08h, 13h, and 0F8h. There may be more. NLSFUNC from DOS 3.3 up uses
part of int 2Fh and so does GRAFTABL.
For int 2Fh calls, register AH identifies which program is to handle
the interrupt. AH values 00h-7Fh are reserved for DOS, not that
anyone cares much. Values 0C0h-0FFh are reserved for applications.
Register AL contains the subfunction code if used.
IBM has reported that PC-DOS 4.0 will sometimes hang when
substituting int 2Fh for int 67h for network calls. Most of DOS 4.0's
external commands check the 2Fh PRINT and other statuses while
operating for enhanced network support. DOS 4.0 SHARE.EXE traps the
2Fh interrupt. IBM and Microsoft DOS programming information for
versions prior to 4.0 strongly imply that 2Fh functions not used by
PRINT.COM are open for general use. DOS 4.0 uses quite a few 2Fh
functions and this may be a cause of incompatibility with some
software.
LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS
4.x due to int 2Fh conflicts. This conflict also occurs under DR-DOS
versions 3.40 and 3.41. DR-DOS is internally similar to DOS 4.0.
Function 01h PRINT.COM
PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
05h PrintScreen Interrupt
13h BIOS Disk Interrupt
14h BIOS Serial Communications Interrupt
15h BIOS "System Services" Interrupt
17h BIOS Printer Interrupt
19h Bootstrap Loader Interrupt
1Ch Timer Tick
23h Control-C Terminate Address
24h Critical Error Handler Address
28h DOS Idle Interrupt (undocumented)
2Fh Multiplex Interrupt
entry AH 01h
AL 00h PRINT Get Installed State
This call must be defined by all int 2Fh
handlers. It is used by the caller of the
handler to determine if the handler is present.
On entry, AL=0. On return, AL contains the
installed state as follows:
return AL 0FFh installed
01h not installed, not OK to install
00h not installed, OK to install
01h PRINT Submit File
DS:DX pointer to submit packet
format byte level
dword pointer to ASCIIZ filename
return CF set if error
AX error code
note 1) A submit packet contains the level (BYTE) and a
pointer to the ASCIIZ string (DWORD in
offset:segment form). The ASCIIZ string must
contain the drive, path, and filename of the
file you want to print. The filename cannot
contain global filename characters.
return CF set if error
AX error code
02h PRINT Cancel File
On entry, AL=2 and DS:DX points to the ASCIIZ
string for the print file you want to cancel.
Global filename characters are allowed in the
filename.
DS:DX pointer to ASCIIZ file name to cancel (wildcards
OK)
return CF set if error
AX error code
03h PRINT Remove All Files
return CF set if error
AX error code
04h PRINT Hold Queue/Get Status
This call holds the jobs in the print queue so
that you can scan the queue. Issuing any other
code releases the jobs. On entry, AL=4. On
return, DX contains the error count. DS:SI
points to the print queue. The print queue
consists of a series of filename entries. Each
entry is 64 bytes long. The first entry in the
queue is the file currently being printed. The
end of the queue is marked by the entry having a
null as the first character.
return DX error count
DS:SI pointer to print queue (null-string
terminated list of 64-byte ASCIIZ
filenames)
CF set if error
AX error code
01h function invalid
02h file not found
03h path not found
04h too many open files
05h access denied
08h queue full
09h spooler busy
0Ch name too long
0Fh drive invalid
05h PRINT release print jobs
return none
note 1) This call has no parameters.
2) Restarts the print queue. This call must be
called to restart the current print job or after
calling function 04h to pause the print job.
06h PRINT get printer device (DOS 3.3+)
return CF clear OK
AX 0000h
CF set
AX 0008h (ERROR_QUEUE_FULL)
DS:SI pointer to printer device header
struc.
note 1) This call has no parameters.
2)
Function 02h PC LAN Program
entry AH 02h
other parameters unknown
Function 05h DOS 3.0+ Critical Error Handler
entry AH 05h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
note This set of functions allows a user program to
partially or completely override the default
critical error handler in COMMAND.COM.
AL xxh Handle Error - nonzero error code in AL
(xxh indicates nonzero extended error code)
return CF clear
ES:DI pointer to ASCIIZ error message
AL (?)
CF set use default error handler
for LANtastic LANOS:
entry AH 05h
AL 00h for installation check
# for error code (in pre DOS 4.00)
1 or 2 for error code in DOS 4.00
BX in Error code
return CF clear if error code converted to text
set if error code can't be converted
ES:DI pointer to ASCIIZ text buffer containing error text.
This is a read-only text buffer and you must not alter
the text in this buffer.
Function 06h ASSIGN
entry AH 06h
AL 00h Installation Check
01h Get Memory Segment
return (AH=00h) AL (to 4.01) nonzero if ASSIGN is installed
(5.0) 0FFh if ASSIGN is installed
(AH=01h) ES segment of ASSIGN work area
note 1) Many references report the return value in AH, but this call
appears to return its information in AL.
2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition)
documents int 2Fh, AX=2000 to check for ASSIGN, but according
to Ray Duncan (the author) this is a typo.
Function 08h DRIVER.SYS
entry AH 08h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
01h Add New Block Device
DS:DI pointer to device driver header
note Moves down list of drivers, copying and
modifying word at offset 29h. Device driver
appended to driver chain.
02h Execute Device Driver Request
ES:BX pointer to device driver request header
return Request header updated as per requested
operation.
Function 10h SHARE (DOS 3.0+)
entry AH 10h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into
an infinite loop.
2) PC-MOS/386 will always report SHARE.EXE as being present, as
its functions are duplicated within the PC-MOS/386 kernel.
3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or
AUTOEXEC file, it can't access the NUL device if 4DOS 3.x is
installed. If SHARE.EXE is in the root, the problem doesn't
usually occur. It's been reported that 4DOS is not the only
program that has problems with SHARE.EXE and the NUL device,
so it's more likely to be an MS-DOS problem than a 4DOS
problem. (dgh on BIX)
4) MS Windows intercepts this call and always returns nonzero
regardless of SHARE's presence. If your program uses file
sharing you should try locking and reading a file and watch
for the error codes returned by int 21h/5Ch. (Lock/Unlock
File)
5) SHARE function is built into DR-DOS 3.4x, but was removed to a
separate TSR module in 5.0 and 6.0.
Function 11h Multiplex - Network Redirection
note In DOS 4.0+, the 11xx calls are all in IFSFUNC.EXE, not in the
PC LAN Program redirector.
entry AH 11h
AL 00h Installation Check
return AL 00h not installed, OK to
install
01h not installed, not OK to
install
0FFh installed
06h Close Remote File
08h Read From Remote File
09h Write to Remote File
0Ah Lock Region of File
BX file handle
CX:DX starting offset
SI high word of size
stack word low word of size
return CF set on error
AL DOS error code
stack unchanged
0Bh Unlock a File Region
BX file handle
CX:DX starting offset
SI high word of size
stack word low word of size
return CF set on error
AL DOS error code
stack unchanged
0Ch Get Disk Space
return AL sectors per cluster
BX total clusters
CX bytes per sector
DX number of available clusters
0Dh unknown
0Eh Set Remote File's Attributes
0Fh Get Remote File's Attributes
10h unknown
11h Rename Remote File
12h unknown
13h Delete Remote File?
14h unknown
15h unknown
16h Open Existing Remote File?
17h unknown
18h unknown
19h CHDIR?
1Ah unknown
1Bh Find First?
1Ch Find Next?
1Dh Close All Remote Files for Process?
1Eh Do Redirection
stack word function to execute
5F02h get redirection list entry
BX redirection list index
DS:SI pointer to 16-byte local
device name buffer
ES:DI pointer to 128-byte
network name buffer
5F03h redirect device
BL device type (see
21h/5F03h)
CX stored parameter value
DS:SI pointer to ASCIIZ source
device name
ES:DI pointer to destination
ASCIIZ network path +
ASCIIZ password
5F04h cancel redirection
DS:SI pointer to ASCIIZ device
name or network path
return CF set on error
1Fh Printer Setup
stack word function
5E02h set printer setup
5E03h get printer setup
return CF set on error
20h Reset Disks and Flush Buffers?
21h Seek on Remote File?
return CF set on error
clear if successful
DX:AX new file position?
22h Process Termination Hook?
23h-26h unknown
Function 12h Multiplex, DOS 3.0+ Internal Services
Function 13h DOS 3.3+(?) Monitor Int 19h
entry AH 13h
DS:DX pointer to the int13h vector to be restored when doing
an int19h call
ES:BX pointer to the int13h vector to be used when DOS
passes the int13h call along
return DS:DX the original int13h vector used by int19h
ES:BX the original int13h vector to which DOS passed the
calls along
note Usually, the original vectors will be the same thing, either
F000:EC59 for floppy disk systems, or maybe F000:A343 for hard
disk systems, but these guys could vary, especially if you're
using a non-standard controller.
Function 14h NLSFUNC.COM
entry AH 14h
AL 00h installation check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
01h unknown
note Calls int 2Fh/1227h under certain circumstances.
02h unknown
note Calls int 2Fh/1227h under certain circumstances.
03h unknown
note In DOS 3.3, appears to be identical to
subfunction 01h.
other parameters unknown
Function 15h CD-ROM extensions
Microsoft CD-ROM driver versions 1.0 through 2.0 will
work only up to DOS 3.31. DOS 4.0 and up require 2.1
drivers. MSCDEX abandons INT 13; and redirection
within DOS to do its work. Some LAN software, such as
LANtastic, uses the same mechanism to implement
network drives. MSCDEX provides IFS functionality in
any version of DOS back to 3.0.
entry AH 15h CD-ROM services
AL subfunctions
00h Get Number of CD-ROM Drives (Installation Check)
BX 00h
return BX number of CD-ROM drive letters used
0000h MSCDEX not installed
CX starting drive letter (0=A:, 1=B:, etc)
note This installation check does not follow the
format used by other software.
01h Get Drive Device List
ES:BX pointer to buffer to hold drive letter list
(5 bytes per drive letter)
return buffer filled, for each drive letter:
byte subunit number in driver
dword address of device driver header
02h Get Copyright File Name
CX drive number (0=A:)
ES:BX pointer to 38-byte buffer for name of copyright
file
return CF set if drive is not a CD-ROM drive
AX error code (15h)
03h Get Abstract File Name
ES:BX pointer to 38-byte buffer for name of abstract
file
CX drive number (0=A:)
return CF set if drive is not a CD-ROM drive
AX error code (15h)
04h Get Bibliographic Doc File Name
CX drive number (0=A:)
ES:BX pointer to 38-byte buffer for name of
bibliographic documentation file
return CF set if drive is not a CD-ROM drive
AX error code (15h)
05h Read VTOC (Volume Table of Contents)
CX drive number (0=A:)
DX sector index (0=first volume descriptor,
1=second,...)
ES:BX pointer to 2048-byte buffer
return CF set on error
AX error code (15h, 21h)
CF clear if successful
AX volume descriptor type
00h other
01h standard
0FFh terminator
06h Turn Debugging On
BX debugging function to enable
note Reserved for development.
07h Turn Debugging Off
BX debugging function to disable
note Reserved for development.
08h Absolute Disk Read
CX drive number (0=A:)
DX number of sectors to read
ES:BX pointer to buffer
SI:DI starting sector number
return CF set on error
AL error code (15h, 21h)
09h Absolute Disk Write
CX drive number (0=A:)
DX number of sectors to write
ES:BX pointer to buffer
SI:DI starting sector number
note Corresponds to int 26h and is currently reserved
and nonfunctional.
0Ah Reserved by Microsoft
0Bh CD-ROM 2.00 - Drive Check
CX drive number (0=A:)
return BX 0ADADh if MSCDEX.EXE installed
AX 0000h if drive not supported
<>0 if supported
0Ch CD-ROM 2.00 - Get MSCDEX.EXE Version
return BH major version
BL minor version
note MSCDEX.EXE versions prior to 1.02 return BX=0.
0Dh CD-ROM 2.00 - Get CD-ROM Drive Letters
ES:BX pointer to buffer for drive letter list
(1 byte per drive)
return Buffer filled with drive numbers (0=A:). Each
byte corresponds to the drive in the same
position for function 1501h.
0Eh CDROM 2.00 - Get/Set Volume Descriptor
Preference
BX subfunction
00h Get Preference
DX 0000h
return DX preference settings
01h Set Preference
DH volume descriptor preference
01h primary volume descriptor
02h supplementary volume descriptor
DL Supplementary Volume Descriptor
Preference
01h shift-Kanji
CX drive number (0=A:)
return CF set on error
AX error code (01h, 15h)
0Fh CD-ROM 2.00 - Get Directory Entry
CX drive number (0=A:)
ES:BX pointer to ASCIIZ pathname
SI:DI pointer to 255-byte buffer for directory entry
return CF set on error
AX error code
CF clear if succesful
AX disk format (0=High Sierra,
1=ISO 9660)
note Directory entry format:
byte length of directory entry
byte length of XAR in LBN's
dword LBN of data, Intel (little-Endian) format
dword LBN of data, Motorola (big-Endian) format
dword length of file, Intel format
dword length of file, Motorola format
---High Sierra---
6 bytes date and time
byte bit flags
byte reserved
---ISO 9660---
7 bytes data and time
byte bit flags
---both formats---
byte interleave size
byte interleave skip factor
word volume set sequence number, Intel format
word volume set sequence number, Motorola
format
byte length of file name
n bytes file name
byte (optional) padding if filename is odd
length
n bytes system data
Error codes:
01h invalid function
15h invalid drive
21h not ready
Function 16h MS-DOS Idle Call (DOS 5.0+, OS/2 2.0, Windows 3.0+)
entry AH 16h idle call
AL 80h
return AL 00h idle call is supported
nonzero idle call is not supported
note 1) When your program is waiting for user input or otherwise not
doing useful work, you can call this function in a loop.
Properly written background programs can monitor this call to
determine if it is safe to do processing. This call
originated in Windows 3.0, then the OS/2 2.0 DOS box, and
finally in DOS 5, where DOSSHELL uses it so processes can tell
the shell when it is safe to swap tasks. It's also used by
the Microsoft Laptop Power Management API.
2) The MS 5.0 Technical Reference recommends making sure the int
2Fh vector is nonzero before calling this function. This
would be to ensure you are running a DOS version that has 2Fh
support.
3) This call is nonblocking, that is, the system does not suspend
the program unless another program is ready to run. Usually
the call returns immediately and the program continues
running.
4) Windows apps should NOT issue this interrupt.
Function 17h MS Windows Clipboard API (3.0+)
no registers known
note This is the interface to the Clipboard. You can open the
Clipboard, determine the size of the data in the Clipboard,
read the Clipboard, write the Clipboard, clear the Clipboard,
and close the Clipboard.
Function 19h SHELLB.COM (DOS 4.0+)
entry AH 00h SHELLB.COM - Installation Check
return AL 00h not installed
0FFh installed
01h SHELLC.EXE Interface
BL 00h if SHELLC transient
01h if SHELLC resident
DS:DX pointer to far call entry point for
resident SHELLC.EXE
return ES:DI ptr to SHELLC.EXE workspace within
SHELLB.COM
note SHELLB.COM and SHELLC.EXE are parts of the DOS
4.x shell
02h SHELLB.COM - COMMAND.COM Interface
ES:DI pointer to ASCIIZ full filename of
current batch file, with at least the
final filename element uppercased
DS:DX pointer to buffer for results
return AL 00h failed, either
(a) final filename element
quoted at ES:DI does not
match identity of shell
batch file quoted as parm of
most recent call of SHELLB
command,
or
(b) no more Program Start
Commands
available.
0FFh success, then:
memory at DS:[DX+1] onwards
filled as:
DX+1: byte count of bytes of
PSC
DX+2: n bytes Program Start
Command text
byte 0Dh terminator
note COMMAND.COM executes the result of this call
in preference to reading a command from a
batch file. Thus the batch file does not
advance in execution for so long as SHELLB
provides PSCs from its workspace. The PSCs are
planted in SHELLB workspace by SHELLC, the
user menu interface. The final PSC of a
sequence is finished with a GOTO COMMON, which
causes a loop back in the batch file which
called SHELLC so as to execute SHELLC again.
The check on batch file name permits PSCs to
CALL nested batch files while PSCs are still
stacked up for subsequent execution.
03h SHELLB.COM - COMMAND.COM Interface
ES:DI pointer to ASCIIZ batch file name as
for fn 02h
return AL 00h quoted batch files does not
match last SHELLB parameter
0FFh quoted batch file name matches
last SHELLB parameter
04h SHELLB.COM - SHELLB.COM transient to TSR
interface
return ES:DI pointer to name of current shell batch
file:
word number of bytes of name
following
bytes (8 max) uppercase name of
shell batch file
Function 1Ah ANSI.SYS (DOS 4.0+)
entry AH 00h Installation Check
return AL 00h not installed
0FFh if installed
01h Get/Set Display Information
CL 5Fh set information
7Fh get information
DS:DX pointer to parameter block as
for int 21h, AX=440Ch, CX=037Fh/
035Fh respectively
return CF set on error
AX error code (unknown)
clear if successful
note 1) AX is destroyed.
2) May be the DOS IOCTL interface to ANSI.SYS.
Function 1Bh XMA2EMS.SYS (DOS 4.0+)
entry AH 00h Installation Check
return AL 0FFh if installed
01h Get Hidden Frame Information
DI hidden physical page number
return AX 0000h if successful
ES segment of page frame
DI physical page number
0FFFFh if failed (no such hidden page)
note 1) XMA2EMS.SYS extension is only installed if DOS has page frames
to hide. This extension hooks onto int 67h fn 58h and returns
from that call data which excludes the physical pages being
used by DOS.
2) Function 02h corresponds to the data edited out of the int
67h/fn 58h call.
Function 43h Microsoft Extended Memory Specification (XMS)
The XMS version 2.00 for MS-DOS allows DOS programs
to utilize additional memory found in 80286 and 80386
machines. With some restrictions, XMS adds about 64K
to the 640K which DOS programs can access directly.
XMS also provides DOS programs with a standard method
for storing data in extended memory.
See Chapter 10 for API.
Function 48h DOSKEY.COM (DOS 5.0+)
entry AH 48h DOSKEY.COM
AL 00h Get Installed State
return AL 00h not installed
0FFh installed
AL 10h Read Command Line
DS:DX pointer to buffer to take the command line
buffer:
offset description
00h buffer size (max 128 bytes)
01h the number of characters, minus 1. The
final CR is copied to the buffer but
not included in the byte count.
02h the first byte of the input line.
return AX 0000h
DS:DX filled with command line
note AX=0 if the user types a macro name, and the buffer is not
filled. Your program must call the function a second time to
expand the macro and copy the macro text to the buffer.
Function 4Ah DOS 5.0 HMA Services (undocumented)
entry AH 4Ah
AL 01h Get Size
return BX number of bytes (possibly 0) of available HMA
ES:DI start of the available HMA
Function 4Bh Microsoft Task Switcher API (DOS 5.0+)
entry AH 4Bh
entry AL 01h Build_Callout_Chain
ES:BX 0:0
CX:DX switcher call-in address
return ES:BX address of the app's Switch_Call_Back_Info data
structure
note All other registers must be preserved.
entry AL 02h Detect Switcher
entry AL 03h Allocate Switcher ID
entry AL 04h Free Switcher ID
entry AL 05h Identify Instance Data
Function 64h SCRNSAV2
entry AH 64h
AL 00h installation check
return AL 00h not installed
0FFh installed
note SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan
Ballard.
Function 7Ah Novell NetWare
entry AH 7Ah
AL 00h installation check
return AL 00h not installed
0FFh installed
ES:DI pointer to FAR entry point for routines otherwise
accessed through int 21h
note 1) Returns address of entry point for IPX and SPX.
2) Parameters are listed in Chapter 13.
Function 87h APPEND
entry AH 87h
AL 00h APPEND installation check
return AH <> 0 if installed
01h APPEND - unknown
02h APPEND - version check
return unknown
Function 88h Microsoft Networks
entry AH 88h
AL 00h network program installation check
return AH <> 0 if installed
BX installed component flags
(test in this order!)
bits 2 messenger
3 redirector
6 server
7 receiver
other bits not used, do not test
01h unknown
02h unknown
03h get current POST address
return ES:BX POST address
04h set new POST address
ES:BX new POST address
09h network version check
Function 89h WHOA! (slows system down for games)
entry AH 89h
AL 00h installation check
return AL 00h not installed
0FFh installed
01h uninstall
return AL 0FDh successful
0FEh error
02h set delay count
BX = delay count (larger values slow system down more)
return AL 0FDh successful
0FEh error
note WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
Function 0AAh VIDCLOCK.COM
entry AH 0AAh
AL 00h installation check
return AL 00h not installed
0FFh installed
note VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
Function 0ADh KEYB.COM (DOS 3.3+)
entry AH 0ADh
AL 80h Get KEYB.COM Version Number
return
BX 00h not installed
nonzero installed
BH major version number
BL minor version number
---
AL 81h Set KEYB.COM Active Code Page
BX code page ID
437 USA
850 Multilingual (Latin I)
852 Multilingual (Latin II)
860 Portuguese
863 French-Canadian
865 Nordic
return CF clear successful
set
AX 0001h if code page is not valid
---
AL 82h Set KEYB.COM Country Flag
BL 00h domestic (USA) keyboard
0FFh not USA keyboard
return CF clear successful
set invalid value was passed in BL
---
AL 83h Get KEYB.COM Country Flag
return BL current country flag value (should be 00h or 0FFh)
note Some of these functions are available in DOS 3.3 and 4.0, but
were not documented. These descriptions are for DOS 5.0.
Function 0AEh DOS Installable Command (DOS 3.3+)
entry AH 0AEh
AL 00h installation check
DX 0FFFFh
DS:BX pointer to command line
return AL 00h execute command normally
0FFh command is TSR extension to
COMMAND.COM
01h execute installed command
DX 0FFFFh
DS:SI pointer to ?
return DS:SI unknown
note 1) This apparently provides a mechanism for TSRs to install
permanent extensions to COMMAND.COM. It seems that
COMMAND.COM makes this call before executing the current
command line, and does not execute the command itself if the
return is 0FFh.
2) Fn 01h apparently requests execution of a previous command
which a call to fn 01h indicated was resident.
3) Format of command line:
offset size description
00h byte max length of command line?
01h byte count of bytes to follow
03h n bytes command line text, terminated by 0Dh
Function 0B0h GRAFTABL.COM (DOS 3.3+)
entry AH 0B0h
AL 00h installation check
return AL 00h not installed, OK to install
0FFh installed
note 1) Also used by DISPLAY.SYS.
Function 0B7h APPEND.EXE (DOS 3.3+)
entry AH 0B7h
AL 00h installation check
return AH 00h not installed
nonzero installed (3.3-4.0)
0FFh installed (5.0)
01h unknown
02h version check
return AH minor version number, otherwise
AL major version number
note The MS 5.0 TR reports AX should be 0FFFFh for
versions compatible with DOS 5.0. However,
DOS 4.0 returns the same value.
03h unknown
04h get APPEND directory list address (DOS 4.0+)
return ES:DI pointer to active APPEND path (128
bytes max) in ASCIIZ format
05h unknown
06h get APPEND modes flag (DOS 4.0+)
return BX APPEND state
bits 0 set if APPEND enabled
1-B reserved, must be zero
C appends dirs to file requests
that already specify a drive
D applies dirs to file requests
that already specify a PATH.
Set if /PATH flag active
E stores the appended dirs in the
APPEND environment variable.
Set if /E flag active
F applies dirs to functions like
EXEC (21h/4B00h) or FIND FIRST
(21h/4Eh). Set if /X flag
active.
note Returns the current operation modes for APPEND.
07h set APPEND modes flag (DOS 4.0+)
BX APPEND state bits (see 06h)
return none
08h unknown
09h unknown
0Ah unknown
10h unknown
11h set TRUENAME flag (DOS 4.0+)
note 1) This call has no parameters.
2) If the next int 21h call is function 3Dh, 43h,
4Eh or 6Ch, the fully qualified filename is
written over top of the filename passed to the
int 21h call. The application must provide a
sufficiently large buffer. This state is reset
after APPEND processes the call.
note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh
fn 0B711h before an open (int 21h 3Dh or 6Ch). The full path
is put in your ASCIIZ string when you do the open, so be sure
it is long enough.
2) The APPEND command apparently covers parts of int 21h/6Ch even
though Microsoft's 4.01 User's Reference says it covers only
0Fh, 23h, 2Dh, 11h, 4Eh & 4Bh, some of those do require
special switches. For 6Ch, it may be a function of the DX
register. If DX=xx1x it looks only in the current directory,
if DX=xx0x it will search the full append path. DX is called
the open flag and gives what action to take if the file exits
or does not exist.
Function 0BFh PC-LAN Network
entry AH 0BFh
AL 00h installation check (REDIREFS.EXE)
return AL 0FFh if installed
AL 80h set REDIRIFS entry point (REDIR.SYS)
ES:DI pointer to FAR entry point to IFS handler in
REDIRIFS
return AL 0FFh if installed
ES:DI pointer to internal workspace
note All future IFS calls to REDIR.SYS are passed to the ES:DI entry
point.
Function 0C7h Artisoft LANtastic AI-LANBIOS
note This is the default entry point for the LANtastic NOS serial
and parallel port drivers.
Function 0D44Dh 4DOS v3.01,+ Command Interpreter (COMMAND.COM replacement)
entry AX 0D44Dh 4DOS installation check
return If 4DOS is present in memory the following values will be
returned:
AX 44DDh
BH minor 4DOS version number
BL major 4DOS version number (same format as DOS int
21h/fn 30h)
CX 4DOS PSP segment address
DL 4DOS shell number (0 for the first shell, 1 for the
second, etc.; incremented each time a new copy of 4DOS
is loaded over a root copy, either in a different
multitasker window or via nested shells)
note 1) (excerpted from 4DOS 3.01 manual) 4DOS now generates two
different INT 2F calls to allow TSRs to tell when 4DOS is back
at the prompt. These calls have AX = D44Eh. The first occurs
immediately before displaying the prompt, with BX = 0; the
second occurs after displaying the prompt and immediately
before accepting keyboard input, with BX = 1. Any routine
intercepting these calls should preserve at least the SI, DI,
BP, SP, DS, ES, and SS registers.
2) This function (440Dh) is only available in swapping mode. It
tells you if 4DOS is loaded in memory, but not whether it is
the parent process of your program. You can determine if 4DOS
is the parent process by comparing the PSP value returned in
CX to the PSP chain pointer at offset 16h in your program's
PSP.
Function 0E3h AnarKey (keyboard command stack and alias program)
entry AH 0E3h
AL 00h installation check
return AL 00h not installed
0FFh installed
note (excerpted from the AnarKey documentation)
Upon installation, ANARKEY hooks into two interrupts:
1) Interrupt used to install program signature
-DOS versions before 3.1 use one interrupt between 60h-67h
-DOS 3.1 and later use interrupt 2Fh
2) Interrupt 21h, function 0Ah
Upon initial program execution, a program "signature" is
installed which is used by ANARKEY to prevent itself from
being installed more than once. Depending upon the DOS
version, a different method of signature installation is
performed.
Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h
thru 67h searching for an unused vector (signified by a null
value). If an unused vector is found, ANARKEY takes it and
installs its program signature there. If all the vectors are
in use, ANARKEY does not install a program signature.
Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh.
By default, ANARKEY appropriates process number 0E3h.
Function 0F7h AUTOPARK.COM (PD TSR hard disk parking utility)
entry AH 0F7h
AL 00h installation check
return AL 00h not installed
0FFh installed
01h set parking delay
BX:CX 32 bit count of 55ms timer ticks
note AUTOPARK is a TSR HD parker by Alan D. Jones.
Function Intel Communicating Applications Standard (CAS 1.01A)
entry AH (default; CAS multiplex number can be user-adjusted)
AL 00h Get Installed State
return AL 00h not installed
01h not installed, not
OK to install
0FFh installed
note No errors are returned.
01h Submit a Task
DS:DX ptr to ASCIIZ path and name of Task
Control File
return AX positive event handle or neg.
error code
note Files associated with a task must stay
in existence until the task is complete
or an error will result.
02h Abort the Current Event
return AX event handle of aborted event or
negative error code
note Terminating an event is not
instantaneous. It might take up to 30
seconds.
03h reserved
04h reserved
05h Find First Entry in Queue
CX Status of the event you are seeking.
This value is compared with the field
at offset 2 of the Control File
0 - event has successfully completed
1 - event is waiting to be processed
2 - number has been dialed
3 - connection has been made (sending)
4 - connection has been made (receiving)
5 - event was aborted
-1 - chooses an event without regard to
status This value will probably be
used most often
Other negative values match error codes
in Control File.
DH direction:
0 - Search forward chronologically
(from the first to the last
occurring event)
1 - Search backward chronologically
(from the last to the first
occurring event)
DL queue to search:
0 - Find first control file in Task
Queue
1 - Find first control file in Receive
Queue
2 - Find first control file in Log
Queue
return AX 0 if successful, or negative
error code
BX event handle for this file
06h Find Next Entry in Queue
DL queue to search:
0 - Find next control file in Task
Queue
1 - Find next control file in Receive
Queue
2 - Find next control file in Log Queue
return AX 0 if successful, or negative
error code
BX event handle for this file
07h Open a File
BX event handle
CX receive file number
0 - the Receive Control File
1 - first received file
2 - second received file
3 - third received file
n - nth received file
DL queue:
0 - open control file in Task Queue
1 - open control file in Receive Queue
or the received data
file specified in the CX register.
2 - Open control file in Log Queue.
return AX 0 if successful, or negative
error code
BX DOS file handle for the requested
file
08h Delete a File
BX event handle
CX receive file number
0 - delete all files associated with a
specific Receive Control File
(including the RCF)
1 - delete first received file
associated with the event handle
2 - delete the second received file
associated with the event handle.
n - delete the nth received file
associated with the event handle
DL queue:
0 - delete control file in Task Queue
1 - delete a file or files associated
with an event in the Receive Queue.
2 - delete control file in Log Queue
note It is strongly recommended
that this function NOT be used to
delete individual Log Control Files
to maintain the integrity of the
log.
return AX 0 if successful, or negative
error code
09h Delete All Files (in a queue)
DL queue:
0 - delete all control files in the
Task Queue
1 - delete all control files in the
Receive Queue and all received
files
2 - delete all control files in the Log
Queue
return AX 0 if successful or negative
error code
0Ah Get Event Date
BX event handle of event whose date you
want to get
DL queue:
0 - task queue
1 - receive queue
2 - log queue
return AX 0 if successful or negative
error code
CX year (1980-2099)
DH month (1-12)
DL day (1-31)
0Bh Set Task Date
BX event handle
CX year (1980-2099)
DH month (1-12)
DL day (1-31)
return AX 0 if successful or negative
error code
0CH Get Event Time
BX event handle
DL queue:
0 - task queue
1 - receive queue
2 - log queue
return AX 0 if successful or negative
error code
CH hour (0-23)
CL minutes (0-59)
DH seconds (0-59)
DL 0
0DH Set Task Time
BX event handle
CH hour (0-23)
CL minutes (0-59)
DH seconds (0-59)
DL unused
return AX 0 if successful or negative
error code
0EH Get External Data Block
DS:DX points to a 256-byte EDB area
return AX 0 if successful or negative
error code
note EDB area is filled with the External
Data Block
block format: (values in decimal)
Offset Length Description
0 1 CAS major version number
1 1 CAS minor version number
2 68 ASCIIZ path to directory
containing Resident Manager
and CAS software. The path
must end with a backslash
70 13 ASCIIZ name of current
phonebook (the CAS
subdirectory is assumed)
83 13 AZCIIZ name of current logo
file (the CAS subdirectory is
assumed)
96 32 ASCIIZ default sender name
128 21 ASCIIZ CSID (CCITT fax device
ID)
149 107 Reserved
0Fh Get/Set Autoreceive State
DL function code:
0 - get current autoreceive state
1 - set current state to value in DH
DH # rings before answer or 0 to
disable
return AX current state or negative error
code
0 - Autoreceive disabled
positive # - # rings before hdw
answers
10h Get Current Event Status
DS:DX pointer to a 444 byte status area
return AX 0 if successful or negative
error code
BX number of the current event (AX=0)
11h Get Queue Status
DL queue:
0 - find status of Task Queue
1 - find status of Receive Queue
2 - find status of Log Queue
return AX # changes to queue since
Resident Manager started or
negative error code If changes
exceeds 7FFFH, the count begins
again at 0.
BX current # of Control Files in
queue
CX current # of received files
12h Get Hardware Status
DS:DX pointer to a 128-byte status area
return AX 0 if successful, negative if not
DS:DX pointer to filled 128-byte status area
13h Run Diagnostics
DL Mode
0 - report progress of diagnostics
1 - start running diagnostics
return if DL=1, AX=0 or a negative error code.
if DL=0, AX=40h or positive number
indicating diagnostics passed. A
negative value indicates failure and
contains the error code
14h Move Received File
BX event handle
CX receive file number
(must be nonzero to specify a received
file)
1 - first received file
2 - second received file
3 - third received file
n - nth received file
DS:DX pointer to new ASCIIZ pathname and
filename. This file must not exist
already
return AX 0 if successful or negative
error code
note The path to the new directory must
exist. This function cannot create
directories.
15h Submit a Single File to Send
DS:DX pointer to variable-length data area
return AX positive event handle or
negative error code
note 1) variable-length data area format:
Offset Length Description
0 1 Transfer type:
0 - 200x200 dpi, facsimile mode
1 - 100x200 dpi, facsimile mode
2 - file transfer mode
3-127 - Reserved.
1 1 Text size (if ASCII file, fax
mode)
0 - 80-column
1 - 132-column
2-127 - reserved
2 2 time to send, in DOS file time
format
4 2 date to send, in DOS file time
format note: Setting both the
time and date fields to 0
schedules the file to be sent
immediately
6 32 ASCIIZ Destination Name (To:
field)
38 80 ASCIIZ pathname of the file to
send
118 47 ASCIIZ phone number to call
165 64 ASCIIZ application-specific
tag field
229 1 reserved; set to zero
230 1 cover page flag:
0 - don't send cover page
1 - send cover page
2-127 - Reserved
231 23 reserved; set to zero
254 var ASCIIZ cover text (if offset
230=1)
2) The individual fields have the same
meaning as in a Task Control File
3) You must set all fields, except for the
Appli-cation-Specific Tag field, before
calling this function. However, you can
set the Destination Name and Cover Text
fields to an empty string
16h-80h Reserved by Intel for future expansion
DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
return AX Error
Codes Description
01h invalid function number
02h file not found
03h path not found
04h too many open files
05h access denied
06h invalid handle
08h queue full
09h busy
0Ch name too long
0Fh invalid drive was specified
CF clear (0) if OK
set (1) if error - error returned in AX
note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for
DOS. Applications should use multiplex numbers 80h through
0FFh.
2) When in the chain for int 2Fh, if your code calls DOS or if
you execute with interrupts enabled, your code must be
reentrant or recursive.
3) Important! In versions of DOS prior to 3.0, the int 2Fh
vector was initialized to zero rather than being pointed into
the DOS service area. You must initialize this vector
manually under DOS 2.x.
┌─────────────────────────────────────────────────────────────────────┐
│ Miscellaneous Interrupts - in numeric order │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 30h FAR jump instruction for CP/M-style calls ..... 5**15│
└─────────────────────────────────────────────────────────────────────┘
note 1) The CALL 5 entry point does a FAR jump to here (not a vector!)
2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 31h Unknown ....................................... 5**16│
└─────────────────────────────────────────────────────────────────────┘
note PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 32h Unknown ....................................... 5**17│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 33h Used by Microsoft Mouse Driver Function Calls . 5**18│
└─────────────────────────────────────────────────────────────────────┘
note See Chapter 14 for mouse programming.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 34h Turbo/Microsoft langs - Floating Point emul. .. 5**19│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0D8h.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 35h Turbo/Microsoft langs - Floating Point emul. .. 5**20│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0D9h.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 36h Turbo/Microsoft langs - Floating Point emul. .. 5**21│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DAh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 37h Turbo/Microsoft langs - Floating Point emul. .. 5**22│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DBh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 38h Turbo/Microsoft langs - Floating Point emul. .. 5**23│
└─────────────────────────────────────────────────────────────────────┘
note 1) This interrupt emulates opcode 0DCh.
2) PC-MOS/386 versions prior to 4.00 use this interrupt to
interface with the PC-MOS API. Version 4.00 and later use int
0D4h for the API. See the Chapter 13 for the PC-MOS API.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 39h Turbo/Microsoft langs - Floating Point emul. .. 5**24│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DDh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Ah Turbo/Microsoft langs - Floating Point emul. .. 5**25│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DEh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Bh Turbo/Microsoft langs - Floating Point emul. .. 5**26│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DFh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Ch Turbo/Microsoft langs - Floating Point emul. .. 5**27│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates instructions with an ES segment
override.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Dh Turbo/Microsoft langs - Floating Point emul. .. 5**28│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt emulates a standalone FWAIT instruction
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Eh Turbo/Microsoft langs - Floating Point emul. .. 5**29│
└─────────────────────────────────────────────────────────────────────┘
note Unknown.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 3Fh Overlay Manager Interrupt (Microsoft LINK.EXE) 5**30│
└─────────────────────────────────────────────────────────────────────┘
note 1) Default overlay manager interrupt; may be changed with LINK
command line switch. (Microsoft/IBM LINK.EXE)
2) The Microsoft Dynamic Link Library manager uses this
interrupt.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 40h Hard Disk BIOS ................................ 5**31│
└─────────────────────────────────────────────────────────────────────┘
Pointer to disk BIOS entry when a hard disk controller
is installed. The BIOS routines use int 30h to
revector the diskette handler (original int 13h) here
so int 40h may be used for hard disk control.
note 1) Keyboard interrupt for DEC Rainbow.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 41h Hard Disk Parameters .......................... 5**32│
└─────────────────────────────────────────────────────────────────────┘
Pointer to first Hard Disk Parameter Block, normally
located in the controller card's ROM. This table may
be copied to RAM and changed, and this pointer
revectored to the new table.
note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
2) format of parameter table is:
word cylinders
byte heads
word starting reduced write current cylinder
(XT only, 0 for others)
word starting write pre-comp cylinder
byte maximum ECC burst length
byte control byte
bits 0-2 drive option (XT only, 0 for others)
3 set if more than 8 heads
4 always 0
5 set if manufacturer's defect map on
max cylinder+1
6 disable ECC retries
7 disable access retries
byte standard timeout (XT only, 0 for others)
byte formatting timeout (XT only, 0 for others)
byte timeout for checking drive (XT only, 0 for others)
word landing zone (AT, PS/2)
byte sectors/track (AT, PS/2)
byte 0 (zeroes)
3) normally vectored to ROM table when system is initialized.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 42h Pointer to screen BIOS entry .................. 5**33│
└─────────────────────────────────────────────────────────────────────┘
Used by EGA, VGA, PS/2.
Relocated (by EGA, etc.) video handler (original int 10h).
Revectors int 10 (BIOS video) calls to EGA BIOS.
Also used by Zenith Z-100.
MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
controller revectors int 13h to here.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 43h Pointer to EGA Graphics Character Table ....... 5**34│
└─────────────────────────────────────────────────────────────────────┘
note 1) The POST initializes this vector pointing to the default table
located in the EGA ROM BIOS. (PC-2 and up). Not initialized
if EGA is not present.
2) This vector was referred to (mistakenly) as the Video
Parameters table in the original EGA BIOS listings.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 44h Pointer to graphics character table ........... 5**35│
└─────────────────────────────────────────────────────────────────────┘
(0:0110h) This table contains the dot patterns for the first 128
characters in video modes 4,5, and 6, and all 256
characters in all additional graphics modes. Not
initialized if EGA is not present.
note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
2) Novell NetWare - High-Level Language API.
3) Also used by Zenith Z-100.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 45h Reserved by IBM (not initialized) ............ 5**36│
└─────────────────────────────────────────────────────────────────────┘
note Also used by Zenith Z-100, purpose unknown.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 46h Pointer to second hard disk parameter block ... 5**37│
└─────────────────────────────────────────────────────────────────────┘
note 1) AT, XT/286, PS/2.
2) (see int 41h) (except ESDI hard disks) (not initialized unless
specific user software calls for it)
3) Also used by Zenith Z-100.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 47h Reserved by IBM (not initialized) ............ 5**38│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 48h Cordless Keyboard Translation ................. 5**39│
└─────────────────────────────────────────────────────────────────────┘
(0:0120h)
This vector points to code to translate the cordless keyboard
scancodes into normal 83-key values. The translated scancodes are
then passed to int 9. (not initialized on PC or AT) This is valid on
the IBM PCjr only. IBM built a number of prototype XT/2 machines with
infrared keyboards which were later sold through salvage outlets, but
this was never a production option.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 49h Non-kbd Scan Code Translation Table Addr (PCjr) 5**40│
└─────────────────────────────────────────────────────────────────────┘
(0:0124h) PCjr translate table, TI Pro video
1) This interrupt is used for operation of non-keyboard devices
on the PCjr, such as the Keytronic Numeric Keypad. This
interrupt has the address of a table used to translate non-
keyboard scancodes (greater than 85 excepting 255). This
interrupt can be revectored by a user application. IBM
recommends that the default table be stored at the beginning
of an application that required revectoring this interrupt,
and that the default table be restored when the application
terminates. (not initialized on PC or AT)
The PCjr BIOS can interpret scancodes other than those
generated by the keyboard to allow for expansion. The keyboard
generates scancodes from 01h to 055h, including 0FFh. Any
scancodes above 55h (56h through 7Eh for make codes and 0D6h
through 0FEh for break codes) are processed in the following
manner:
1) if the incoming make code falls within the range of the
translate table whose address is pointed to by int 49h,
it is translated into the corresponding scancode. Any
incoming break codes above 0D5h are ignored.
2) if the new translated scancode is less than 56h, it is
processed by the BIOS as a keyboard scancode and the same
data is placed in the BIOS keyboard buffer.
3) if the translated scancode is higher than 55h or the
incoming scancode is outside the range of the translate
table, 40h is added creating a new extended scancode. The
extended scancode is placed in the BIOS keyboard buffer
with the character code of 00h (NUL). This utilitizes the
range of 96h through 0BEh for scancodes 56h through 7Eh.
The default translate-table maps scancodes 56h through
6Ah to existing keyboard values. Codes 6Bh theough 0BEh
are mapped (by adding 40h) to extended codes 0ABh through
0FEh since they are outside the range of the default
translate table.
The format of the translate table is:
0 length - the number of nonkeyboard scancodes that
are mapped within the table (from 1 to n).
1 to n word high byte 00h (NUL) byte scancode with low
order byte representing the scancode mapped
values relative to their input values within the
range of 56h through 7Eh.
With this layout, all keyboard scancodes can be intercepted
through int 9h and and nonkeyboard scancodes can be
intercepted through int 48h.
2) On the TI Professional, this interrupt is used for some video
services.
entry AH 17h Get Display Offset
return ES:DI segment/offset of current display buffer
note The TI Pro has only 2048 bytes of character RAM, but it
is followed by another 2048 bytes of "phantom" RAM
(i.e. the same 2048 bytes are available at two
different addresses) so that wraparound checks need not
be made when writing to the screen. The attribute RAM
is "shadowed" behind the character RAM through the
attribute register.
3) Most of the TI Pro functions are identical to the IBM int 16h
functions, particularly 0 through 0Eh, although 6 and 7
(scroll) are quite different and all cursor addressing has the
rows and columns flipped (i.e. IBM uses DH for row, but TI
uses DH for column).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2, EISA) 5**41│
└─────────────────────────────────────────────────────────────────────┘
1) Not initialized on PC or AT.
2) Invoked by PS/2 and Convertible BIOS when real-time clock alarm
occurs.
3) Used by TI Professional PC for keyboard DSR interface (keyboard
BIOS interrupt) Functions for AH=0, 1, 2 and 5 are identical to
IBM's int 16h.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Bh Reserved by IBM (not initialized) ............ 5**42│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by IBM Micro Channel SCSI hard disk controllers.
2) Used by Virtual DMA Services Specification (see Chapter 21 for
VDS programming information)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Ch Reserved by IBM (not initialized) ............ 5**43│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Dh Reserved by IBM (not initialized) ............ 5**44│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Eh Reserved by IBM (not initialized) ............ 5**45│
└─────────────────────────────────────────────────────────────────────┘
note Used instead of int 13h for disk I/O on TI Professional PC.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 4Fh Reserved by IBM (not initialized) ............ 5**46│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 50-57 IRQ0-IRQ7 Relocation .......................... 5**47│
└─────────────────────────────────────────────────────────────────────┘
note 1) Normally not initialized.
2) IRQ0-IRQ7 relocated by DesQview.
3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 58h Reserved by IBM (not initialized) ............ 5**48│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 59h Reserved by IBM (not initialized) ............ 5**49│
└─────────────────────────────────────────────────────────────────────┘
GSS Computer Graphics Interface (GSS*CGI)
entry DS:DX pointer to block of 5 array pointers
return CF clear
AX return code
CF set
AX error code
note 1) Int 59h is the means by which GSS*CGI language bindings
communicate with GSS*CGI device drivers and the GSS*CGI device
driver controller.
2) Also used by the IBM Graphic Development Toolkit.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ah Reserved by IBM (not initialized) ........... 5**50│
└─────────────────────────────────────────────────────────────────────┘
note IBM Cluster Adapter BIOS entry address.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Bh Reserved by IBM (not initialized) ............ 5**51│
└─────────────────────────────────────────────────────────────────────┘
note Used by IBM Cluster Adapter.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ah Cluster Adapter BIOS entry address ............ 5**52│
└─────────────────────────────────────────────────────────────────────┘
note Normally not initialized.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Bh Reserved by IBM (not initialized) ............ 5**53│
└─────────────────────────────────────────────────────────────────────┘
note Used by cluster adapter?
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ch NETBIOS interface entry port, TOPS ............ 5**54│
└─────────────────────────────────────────────────────────────────────┘
note 1) See Chapter 13 for information on network programming.
2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for
the Pause key on the keyboard. The TI BIOS allows any user
routine to execute from the Pause interrupt as long as it
eventually returns.
3) Used by Windows/386 by Virtual Machine routines.
4) Used by Novell Netware 2.0.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Dh Reserved by IBM (not initialized) ............ 5**55│
└─────────────────────────────────────────────────────────────────────┘
note The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
keyboard services.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Eh Reserved by IBM (not initialized) ............ 5**56│
└─────────────────────────────────────────────────────────────────────┘
note TI Professional PC - Program Break.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 5Fh Reserved by IBM (not initialized) ............ 5**57│
└─────────────────────────────────────────────────────────────────────┘
note TI Professional PC - Keyboard queueing.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 60h-67h User Program Interrupts .................... 5**58│
└─────────────────────────────────────────────────────────────────────┘
note 1) Available for general use.
2) Some Adaptec hard disk controllers used these interrupts.
Models and usages unknown.
3) Various major programs make standardized use of this group of
interrupts. Details of common use follows:
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 60h User Program Interrupt ........................ 5**59│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by 10-Net Network OS Interface.
2) Used by FTP Driver - PC/TCP Packet Driver Specification.
3) See Chapter 13 for network programming calls.
4) Used by TOPS netork (TTALK.EXE).
5) The 2-The-Max VGA-16 board TSR zoom utility uses this
interrupt by default. (see int 61h for details)
6) Versa-Spool print spooler revectors int 17h to here when
installing its own 17h handler. (see int 61h also)
7) Some older OMTI and Adaptec hard disk controllers used the
interrupts from 60h to 63h as 16 bytes of scratch RAM.
8) Used by GDOSMEM Windows TSR skeleton.
entry AX GTSR Identification #
BX 00h GTSR Installation Check
return BX GTSR Identification #
entry AX GTSR Identification #
BX 01h GTSR Increment WORD in CX:DX
CX Segment => WORD
DX Offset => WORD
return none
9) Used by TDOSMEM Windows TSR skeleton.
entry AX TTSR Identification #
BX 00h GTSR Installation Check
return BX GTSR Identification #
CX Segment => local WORD
DX Offset => local WORD
entry AX TTSR Identification #
BX 01h GTSR Increment WORD in CX:DX
return none
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 61h User Interrupt ................................. 5** │
└─────────────────────────────────────────────────────────────────────┘
1) Default interrupt used by Chris Dunford's PCED 2.0 API.
2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
Function 00h Get Current Mode Value
entry AH 00h
return AL current mode value
Function 01h Set New Open-Mode Value
entry AH 01h
AL new value to set
return none
3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt
by default.
Function 00h Zoom
entry AX 0000h
BX zoom factor (0-7x)
return none
Function 01h Center Zoomed Window
entry AX 0001h
BX x coordinate to center
CX y coordinate to center
return none
note 'x' and 'y' will be positioned as close to the center of
the display as possible.
Function 02h End Zoom
entry AX 0002h
return none
note Restores screen to original state.
Function 03h Report Zoom
entry AX 0003h
return AX zoom factor (0-7)
Function 04h Enter Specify Mode
entry AX 0004h
return none
note This mode is entered whenever the predefined hotkey is
pressed.
Function 05h Query Zoom Window
entry AX 0005h
BX segment address of return argument array
CX offset address of return argument array
return BX:CX 14 byte array
offset[0] x start of zoom window
[1] y start of zoom window
[2] x end of zoom window
[3] y end of zoom window
[4] current zoom factor
[5] zoom offset start x
[6] zoom offset start y
Function 06h Set Zoom Window
entry AX 0006h
BX segment address of window coordinate array
CX offset address of window coordinate array
return BX:CX array
offset[0] x start of zoom window
[1] y start of zoom window
[2] x end of zoom window
[3] y end of zoom window
4) Versa-Spool print spooler revectors int 1Ch to here when
installing its own 1Ch handler.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 63h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare v2.0.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 64h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 65h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare v2.0.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 67h User Program Interrupt ........................ 5**60│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification
3.1 and higher. (EMS and LIM)
2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory
Specification 3.1 and higher. (EEMS)
3) Used by Phar Lap/Quarterdeck VCPI v1.0.
4) See Chapter 10 for EMS/EEMS programming information.
5) The Advanced Digital PC Slave board (also marketed by Alloy)
contains its own 8mHz 8086, up to 768K of on-card memory and a
built-in monochrome monitor adapter, communicating with an
RS232 terminal at 19.2KBaud. Their operating system is an
adaptation of MSDOS 2.11 called RTNX or ATNX. ?TNX uses
interrupt 67h for record locking, using an "interrupt 67h
semaphore" system in which a data record access must be
preceded by a call to int 67h with a string that contains a
filename and a record number to lock.
6) Some Adaptec hard disk controllers have problems related to
their use of int 67h. Supposedly the Adaptec can be made to
use a driver instead of ROM. The driver is generated by
running the ROM program at C800:5 and this fixes the problem.
Apparently this driver is called ADAPTEC.DRV. Check with
Adaptec if you suspect a problem.
7) IBM issued a known bug report listing a fault in DOS 4.0's
network handling within IBMBIO.COM. The exact wording of the
report is:
IR79404 WAIT IBMBIO INT 2FH for INT 67H causes hang
8) Used by PC-Net semaphore calls.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 68h Not Used (not initialized) ................... 5**61│
└─────────────────────────────────────────────────────────────────────┘
note 1) APPC/PC Network Interface. See Chapter 13.
2) Some Toshiba laptop hard disk controllers use this interrupt.
3) Used by HDTest to communicate with BIOS entry point.
4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 69h Not Used (not initialized) ................... 5**62│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Ah Not Used (not initialized) ................... 5**63│
└─────────────────────────────────────────────────────────────────────┘
note Used by SLR System's OPTHELP.COM, a TSR help system for their
OPTASM assembler. OPTHELP may be configured to interrupts
from 60h to 7Fh.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Bh Not Used (not initialized) ................... 5**64│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Ch System Resume Vector (Convertible) ............ 5**65│
└─────────────────────────────────────────────────────────────────────┘
note 1) This vector is not initialized on the PC, XT, or PCJr.
2) DOS 3.2 Realtime Clock update uses this interrupt.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Dh Not Used (not initialized) ................... 5**66│
└─────────────────────────────────────────────────────────────────────┘
note Used internally by VGA adapter - IBM, Paradise, Video 7, NCR
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Eh Not Used (not initialized) ................... 5**67│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 6Fh 10-Net API..................................... 5**68│
└─────────────────────────────────────────────────────────────────────┘
note 1) See Chapter 13 for information on the 10-Net API.
2) HP ES-12 Extended BIOS
a) Read CMOS Memory
entry AH 22h
BL address of CMOS byte to read
BP 0012h
return AH status
AL byte read
BP, DS destroyed
b) Write CMOS Memory
entry AH 24h
AL new value
BL address of CMOS byte to write
BP 0012h
return AH status
BP, DS destroyed
3) Novell NetWare - PCOX API (3270 PC terminal interface).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 70h IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) . 5**69│
└─────────────────────────────────────────────────────────────────────┘
This interrupt services the real-time clock hardware. The
hardware supports 2 modes of operation, an interrupt at a
specific 24 hour interval (i.e 9:42 am), or repeatedly every
0.976 ms (1,024 kHz). Both modes can operate at the same time
if needed.
In the 24 hour alarm mode, the interrupt is vectored here by
hardware and interrupt 4Ah is called to alert the application
program of the alarm. Int 4Ah is not handled by the BIOS
other than to return, and is normally revectored by a
particular application using the alarm.
When repeating interrupt mode is active, the 32-bit
microsecond counter consisting of timer_clk_low and
timer_clk_hi is decremented by 976 us on every interrupt.
When the timer reaches zero, the byte pointed to by the offset
@timer_wait_off and and segment @timer_wait_seg is set to 80h
(this pointer is set by an application program through int 1Ah
function ah=6).
The Motorola MC146818A real time clock chip, or its
equivalent, can be programmed to generate the real time clock
interrupt (int 70h) approximately 1024 times per second. The
BIOS Real Time Clock ISR is invoked on each real time clock
interrupt. Only AT BIOSs support the Real Time Clock ISR.
The BIOS initializes the int 70h vector to address F000:5124h.
Three AT BIOS functions interface with the int 70h Real Time
Clock ISR. These are:
int 15h, AH 83h Event Wait Interval
int 15h, AH 86h Wait
int 1Ah, AH 06h Set User Alarm
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) . 5**70│
└─────────────────────────────────────────────────────────────────────┘
note LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved .......... 5**71│
└─────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 10).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved .......... 5**72│
└─────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 11).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 74h IRQ 12 Mouse Interrupt (PS/2) ................ 5**73│
└─────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 12).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 75h IRQ 13, Coprocessor Error (AT) ................ 5**74│
└─────────────────────────────────────────────────────────────────────┘
note 1) BIOS redirects math coprocessor errors to int 2 (NMI).
2) The math co-processor 80287 invokes this interrupt. Int 75h
calls the non-maskable interrupt int 2 to halt the system.
(80287 is not used if this vector is left pointing here).
Programs which use the 80287 must re-vector this interrupt to
use the 80287.
3) Under DOS 3.2, this interrupt is routed through the DOS
interrupt stack pool like device interrupts. However,
coprocessor exceptions generally do not resume via IRET and
this fill the interrupt pool (stacks allocated and never
deallocated) on exceptions. Microsoft has a patch available
for DOS 3.2.
4) Weitek ABACUS x167 math coprocessor exception handler shares
this interrupt with Intel 80x87 if present.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75│
└─────────────────────────────────────────────────────────────────────┘
note 1) Called by hardware 8259-2 IRQ 14.
2) When the hard disk controller has completed its task, it
signals completion though hardware activation of int 76h. The
status in hdsk_int_flags is set to "done", a value of 0FFh.
Int 15/fn91h may also be called to signal the interrupt is
done.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved ........... 5**76│
└─────────────────────────────────────────────────────────────────────┘
note Future services (called by hardware 8259-2 IRQ 15).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 78h Not Used ...................................... 5**77│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by Novell Netware 2.0 - non-dedicated shell.
2) DESQview uses ints 78h-7Fh for itself to revector the 8259
interrupt controllers.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 79h Not Used ...................................... 5**78│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest
Group in releases after late '86.
2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 7Ah Reserved ...................................... 5**79│
└─────────────────────────────────────────────────────────────────────┘
note 1) Novell NetWare - Low-Level API APX, versions 2.0a+. See
Chapter 13.
2) AutoCAD Device Interface, used by various video boards.
3) IBM 3270 Emulator program.
4) Also used by early versions of "File Access Utility" by
Automated Insurance Resource Systems. AIRS changed to a
different interrupt in late '86 to eliminate conflict with
Novell.
5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest
Group in versions 2.5 and higher before late '86. Lanquest
changed to int 79h to prevent Novell conflict.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 7Bh-7Eh Not Used by IBM ............................ 5**80│
└─────────────────────────────────────────────────────────────────────┘
Btrieve API
entry register unknown
functions:
00h open
01h close
02h insert
03h update
04h delete
05h get_equal
06h get_next
07h get_prev
08h get_greater
09h get_gr_eql
0Ah get_less
0Bh get_less_eq
0Ch get_first
0Dh get_last
0Eh create
0Fh stat
10h extend
11h set_dir: set directory information
12h get_dir: get directory information
13h begin_trans
14h end_trans
15h abort_trans
16h get_pos: get record position number
17h get_direct: get data by sending record position
18h step_direct
19h stop
1Ah version
1Bh unlock
1Ch reset
return unknown
note Btrieve sets low byte of vector to 33h; this serves as the
installation check.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 7Bh Novell ........................................ 5** │
└─────────────────────────────────────────────────────────────────────┘
note 1) BTRIEVE from Softcraft, Inc.
2) IPX on Proteon networks with ANW 2.0 or greater.
3) Air File by Automated Insurance Resource Systems.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 7Ch REXX-PC API ................................... 5**81│
└─────────────────────────────────────────────────────────────────────┘
IBM REXX-PC macro language
entry AX 0000h Initialize
DS:SI pointer to null terminated name of program to be
executed
EB:BX pointer to null terminated argument string to be passed
to the program
DX:DI pointer to an environment control block in the format:
dword offset in segment to signature string The
segment is that contained in DX and the
signature is the uppercase ASCIIZ string
"REXX".
dword offset in DX to environment name ASCIIZ string
note: The environment name will be truncated if
longer than 32 characters.
dword offset in DX to the file extension ASCIIZ
string
dword path search - word value of 0 or non-zero. This
controls the searching of the path for commands
that might be REXX programs. 0 means no search
made, non-zero means search first.
dword x'AAAA'
This is a signature that allows REXXPC88 to
call your own defined routine when a command
expression needs to be processed.
DD Segment:offset (standard INTEL format) of
environment work buffer, the first double word
of the buffer MUST be the entry point address
of the environment service routine to be
called. The rest of the buffer may be used in
any way you choose and will NOT be examined or
modified by REXXPC88.
return none
note 1) The only way to tell if the program exists and can be executed
is by examining a value returned by the program in the next
call described below. If the program returns an end of
program indication and a string was expected instead, it means
that the program was not found or could not be executed for
some reason.
2) All registers except SS and SP are destroyed. The caller must
save any other registers of interest.
Function 01h Interpret REXX Command
This call tells REXXPC88 to interpret the REXXPC88 program
until a value is produced.
entry AX 0001h
return DS:DX points to a result string, terminated by a CR + LF +
NULL. The final result string (which marks the end of
the program) consists of nothing but EOF + NULL.
REXXPC88 will continue to return this "end of program"
string until reinitialized via an AX=01h call as
described above.
note All registers except SS and SP are destroyed. The caller must
save any other registers of interest.
Function 02h Termination
This call allows resident REXXPC88 extensions to terminate
execution of a REXXPC88 program, typically after detecting an
error.
entry AX 0002h
DS:SI points to null terminated string to be displayed as an
error message before terminating the REXXPC88 program.
return none
note Terminates the REXXPC88 program and returns control to DOS.
Function 03h Load
This call tells REXXPC88 to look up a program variable and
return its current value (if any).
entry AX 0003h
DS:SI points to null terminated name of REXXPC88 program
variable.
DS:DX points to the null terminated string value of the
program variable. DX is zero if the program variable is
currently undefined. This string is in REXXPC88's data
area and must be treated as read-only.
return none
note 1) All registers except SS and SP are destroyed. The caller must
save any other registers of interest.
Function 04h Store
This call tells REXXPC88 to store a null terminated string as
the value of a program variable.
entry AX 0004h
DS:SI points to null terminated name of REXXPC88 program
variable
ES:BX points to null terminated string to be assigned to the
variable
return none
note 1) The string is copied into REXXPC88's data dictionary. If
there is insufficient storage to store the string, REXXPC88
terminates execution of the program with an error message and
returns to DOS.
2) Registers: all registers except SS and SP are destroyed. The
caller must save any other registers of interest.
Function 05h User-Written Extensions
entry AX 0005h
SS:BP points to a C stack frame containing a two-byte pointer
to the null terminated function name, a two-byte integer
specifying the number of arguments, and a two-byte
pointer to an array of pointers (each two bytes) to the
arguments (each argument is a null terminated string).
return DS:SI must point to a null terminated result string. A pointer
of NIL (DS = 0, SI = 0) is reserved by REXXPC88 and
indicates that "no REXXPC88 extensions answered the
function".
note 1) Registers: all registers except SS, SP, and BP are available
for use.
2) Stack: Since the amount of REXXPC88 stack space remaining for
growth can't be ascertained by the user extension program, the
user may wish to switch to a local stack if he requires more
than about 128 bytes of stack growth.
Function 06h Queue
This call tells REXXPC88 to place data on the data or external
interrupt queue either FIFO or LIFO.
entry AX 06h
BH 00h Internal data queue accessible via PULL and
PARSE PULL
01h External interrupt queue accessible via
LINEIN(EXQUE)
BL 00h Queue data FIFO on selected queue
01h Queue data LIFO on selected queue
DS:SI points to null terminated string to be queued.
return AX 0000h Message queued successfully.
0001h No REXXPC88 program running at current time.
Message not queued.
0002h Not enough storage available for message.
Message not queued.
0003h Either BH (queue number) or BL (FIFO/LIFO flag)
out of range. Message not queued.
note 1) For the Internal data queue a string may not exceed 127
characters.
2) For the External int. queue a string may not exceed available
storage.
3) Registers: all registers except SS and SP are destroyed. The
caller must save any other registers of interest.
Function 07h Check for Loaded Extension
This call provides a way for a REXXPC88 extension to find out
if a copy is already loaded, and to exchange information with
a resident version.
entry AX 0007h
SS:BP points to a C stack frame containing a two-byte pointer
to the null terminated name of the REXXPC88 extension.
return If the extension is already loaded, then DS:SI points to an
ASCIIZ string '1', and other registers are used as desired by
the extension to communicate with its non-resident copy.
(Generally, this involves pointing ES:BX to the resident
portion's entry point). If the extension is not yet resident,
then DS:SI points to an ASCIIZ '0'.
note Registers: all registers except SS, SP and BP are available
for use.
Function 08h Reserved
This call is reserved for communication between REXXSYS.SYS
and REXXIBMR.
entry AX 0008h
return none
Function 09h Check for REXX Installed
This call provides external applications a way to determine if
REXXIBMR is installed.
entry AX 09h
return AX 0FFFFh REXXIBMR is not installed
AX 0AAAAh REXXIBMR is installed
note It is assumed that your application will inspect the value of
the 7Ch interrupt vector prior to issuing this interrupt. If
the vector is 0000:0000 then REXXIBMR is not installed and
this function will cause the system to crash.
Function 0Ah Uninstall resident version of REXX
This call is used to uninstall a resident version
entry AX 000Ah
BX 0AAAAh
return AX 0000h Resident version uninstalled
0001h Resident version cannot uninstall, as one
interrupt vector has been modified by some
other program in a non-conforming manner.
0FFFFh The installed resident version does NOT support
the uninstall request code (i.e., it is pre
0.55 level).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 7Fh IBM 8514/A Graphics Adapter API ............... 5**82│
└─────────────────────────────────────────────────────────────────────┘
note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters
unknown.
2) Used by second copy of COMMAND set with SHELL=.
3) Not used by COMMAND /C at DOS prompt.
4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and
Multiport/2) use int 7Fh as a method of communication between
the system-unit resident interrupt handler and the RTIC card's
operating system. There is a convention for using it in which
register AX contains the signature of the handler that should
handle the interrupt. Some signatures are:
AX 0200h is a call to the current task dispatcher
(from the BTRIEVE application
interface).
AX 0101h is a call from an application to the
RTIC function request mechanism.
AX 0FEEDh is a call from the ICAINTH.SYS interrupt
handler.
5) MultiLink Advanced (a custom version of PC-MOS/386), versions
3.03 and higher, from The Software Link, Inc.
Function 02h Invoke user interface (multitasking DOS shell)
entry AH 02h
AL 00h
return unknown
Function 0Dh Set new spooler parameters
entry AH 0Dh
AL ASCII code for disposition (D,S,H,N)
BH ASCII code for priority (0-9)
BL ASCII code for class (A-Z)
return AL Error
00h OK
01h no spooler installed
02h invalid request
Function 0Eh Get spooler parameters
entry AH 0Eh
return AL 01h if no spooler installed, otherwise:
AL ASCII code for disposition (D,S,H,N)
BH ASCII code for priority (0-9)
BL ASCII code for class (A-Z)
6) There have been mentions of assorted other little-known
programs using this interrupt. In view of its use by DOS and
the increasingly-popular 8514/A adapter, it would probably be
wise to avoid int 7Fh for aftermarket application software.
7) Also used by IBM HLLAPI.
8) Used internally by later versions of Tom Mack's RBBS-PC BBS
system.
9) Used by Novell Netware 2.0+ to switch non-dedicated shell to
console mode.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 80h-85h Reserved by BASIC .......................... 5**83│
└─────────────────────────────────────────────────────────────────────┘
note Interrupts 80h through 0ECh are apparently unused and not
initialized in most clone systems. Not known if GWBASIC or
MBASIC use any of these interrupts.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 80h Novell Netware 2.0 ............................ 5** │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 81h Novell Netware 2.0 ............................ 5** │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 82h Reserved by BASIC ............................. 5** │
└─────────────────────────────────────────────────────────────────────┘
note 1) Used in some early versions of NEC Multispeed laptop for ROM
application management.
2) Used by Pecan Software's Pascal compiler (P-system).
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 81h Used by Proteon Network ....................... 5** │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 86h Int 18 when relocated by NETBIOS .............. 5**84│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 86h-0F0h Used by BASIC when interpreter is running . 5**85│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0A0h-0D0h TI Professional - free interrupt pool .... 5** │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0A4h Right Hand Man API ............................ 5**86│
└─────────────────────────────────────────────────────────────────────┘
entry AH RHM function (unknown)
return unknown
note Right-Hand Man is a shareware TSR desktop utility similar
to SideKick.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0D4h PC-MOS/386 API ................................ 5**87│
└─────────────────────────────────────────────────────────────────────┘
note This interrupt is used for access to the PC-MOS/386 4.x
operating system's user API. Previous versions of the OS
used interrupt 38h. See Chapter 13 for MOS API programming
information.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E0h Digital Research CP/M-86 function calls ....... 5**88│
└─────────────────────────────────────────────────────────────────────┘
note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector
during operation and leaves it pointing somewhere in the TPA
on exit. Perhaps used by the mysterious Lotus add-on program
hook?
2) Used by Digital Research CP/M-86, Concurrent CP/M and
Concurrent DOS API entry points. Values are typically passed
in the DX register and returned in the AX register.
3) Used by Larry Himes' PD TBACK background timeslicer for DOS.
(very old)
4) Used by American Data Technology SmartFAX products.
entry AH 20h Send FAX
AL 02h for FAX format file
03h for ASCII format file
CH number of redials (0-9). Defaults to 9 if input out of
range.
CL backoff time (1-99). 1 unit is 15 sec, value is set to
99 if out of range
DS:DX input filename (ASCII). 20 bytes max.
DX:BX dial number. Speed dial number is allowed
return AL (if bit 7 set) number of files transmitted
(bit 7 not set) 0FFh file not found
0FEh no dial tone
0FDh line busy or non-FAX tone
0FCh other error
entry AH 21h reserved
entry AH 22h Auto/Manual Transmission Toggle
AL 00h switch to Auto mode (default)
01h switch to Manual mode
return none
entry AH 23h Set Manual Receive Mode
AL 00h switch to Auto mode (default)
01h switch to Manual mode. SmartFAX will not
answer phone
return none
entry AH 24h Send FAX Handshake to Remote
note No other parameters are necessary. No returns.
entry AH 25h Enable/Disable Background Task for Spooling
AL 00h enabled background operation. Program will put
the received data in the 80188 to spool.
01h disables background operation. Does not spool
data. Data can be recovered by fns 26h and 27h.
return none
entry AH 26h Check 80188 Buffer
AX data length
BL 00h some data of the same page appears in the next
buffer
01h end of page, more to follow
02h end of page, last page
entry AH 27h Get Data from 80188 Buffer
DS:DX pointer to buffer to be saved, minimum size 12Kb.
return AX data length
BL 00h some data of the same page appears in the next
buffer
01h end of page, more to follow
02h end of page, last page
entry AH 28h Reset After Receive
note Resets SmartFAX for next call. No other parameters.
entry AH 29h Enable/Disable Communication Function
AL 00h enable communication
01h disable communication
note In disable mode, SmartFAX will not send or receive.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E1h PC Cluster Program ............................ 5**89│
└─────────────────────────────────────────────────────────────────────┘
note This is a pointer to the disk server data table.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E2h PC Cluster Program ............................ 5**90│
└─────────────────────────────────────────────────────────────────────┘
note Interrupt 1Ch is revectored to here.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E4h Logitech Modula-2 v2.0 Monitor Entry ........ 5**91│
└─────────────────────────────────────────────────────────────────────┘
entry AX 05h monitor entry
06h monitor exit
BX priority
return unknown
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E5h Not Used ...................................... 5**92│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E6h Not Used ...................................... 5**93│
└─────────────────────────────────────────────────────────────────────┘
note Used by PKzip file compressor.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E7h Not Used ...................................... 5**94│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E8h Not Used ...................................... 5**95│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0E9h Not Used ...................................... 5**96│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0EAh Not Used ...................................... 5**97│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0EBh Not Used ...................................... 5**98│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0ECh Not Used ...................................... 5**99│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0EDh Not Used ..................................... 5**100│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0EEh Not Used ..................................... 5**101│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0EFh GEM interface (Digital Research) ............. 5**102│
└─────────────────────────────────────────────────────────────────────┘
entry CX 0473h
DS:DX pointer to GEM parameter block
note no other parameters are known
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0F0h unknown ...................................... 5**103│
└─────────────────────────────────────────────────────────────────────┘
note 1) Used by secondary copy of COMMAND when SHELL= set.
2) Not used by COMMAND /C at DOS prompt.
3) Used by BASIC while in interpreter.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupts 0F1h-0FFh (absolute addresses 3C4h-3FFh) ......... 5**104│
└─────────────────────────────────────────────────────────────────────┘
note Location of Interprocess Communications Area.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0F4h Not Used ............ ........................ 5**105│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0F5h Not Used ............ ........................ 5**106│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0F8h Set Shell Interrupt (OEM) .................... 5**107│
└─────────────────────────────────────────────────────────────────────┘
Set OEM handler for int 21h calls from 0F9h through 0FFh
entry AH 0F8h
DS:DX pointer to handler for Functions 0F9h thru 0FFh
note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set
up to allow ONE handler for all 7 of these calls. Any call to
these handlers will result in the carry bit being set and AX
will contain 1 if they are not initialized. The handling
routine is passed all registers just as the user set them.
The OEM handler routine should be exited through an IRET.
2) 10 ms interval timer (Tandy?)
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0F9h Reserved ..................................... 5**108│
└─────────────────────────────────────────────────────────────────────┘
note First of 8 SHELL service codes, reserved for OEM shell
(WINDOW); use like HP Vectra user interface?
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FAh USART ready (RS-232C) ........................ 5**109│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FBh USART RS ready (keyboard) .................... 5**110│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FCh Unknown .......................................5**111│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FDh reserved for user interrupt .................. 5**112│
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FEh reserved by IBM .............................. 5**113│
└─────────────────────────────────────────────────────────────────────┘
note AT/XT286/PS50+ - vector destroyed by return from protected
mode.
┌─────────────────────────────────────────────────────────────────────┐
│Interrupt 0FFh reserved by IBM .............................. 5**114│
└─────────────────────────────────────────────────────────────────────┘
note 1) AT/XT286/PS50+ - vector destroyed by return from protected
mode.
2) Zenith Z-100 (S-100 bus MSDOS) warm boot.